【问题标题】:How can i make a good get and set function with mysql in PHP? [closed]如何在 PHP 中使用 mysql 制作一个好的 get 和 set 函数? [关闭]
【发布时间】:2013-12-15 18:18:48
【问题描述】:

我想在 PHP 中创建一个函数,该函数使用 mysql 从我的浏览器游戏获取和设置统计信息到数据库。

include ("connection.php");

function getstat($user_id)
{

}

function setstat($user_id)
{

}

所以我的数据库中有一个表来存储统计信息,因此 stat_id 必须等于变量 $user_id 所以对我来说很难有人可以帮忙吗?

【问题讨论】:

  • 你知道 SQL 的基础知识,如何执行 SELECT、INSERT 和 UPDATE 语句吗?您使用什么 API 与您的数据库通信(connection.php 中发生了什么)、MySQLi、PDO?如果没有很多更多信息,我们将无法为您提供帮助。
  • hi micheal in my connection.php 是到我的数据库的连接,我知道如何使用 SELECT 、 INSERT 和 UPDATE 但在这里对我来说很难使用,我必须检查 $user_id等于我数据库中的 user_id,所以我可以获取该统计信息。我希望你现在明白了...
  • 抱歉,需要更多细节。我们当然知道你的连接发生在 connection.php 中,但是 PHP 中有多种连接 MySQL 数据库的不兼容方法,我们只能猜测你使用的方法。
  • 你试过什么?
  • 为你准备一个冗长的答案,待命:) 希望它能解释一些事情。

标签: php mysql get set


【解决方案1】:

这真的不是那么复杂,所以我强烈建议学习一些 SQL。 w3schools 上有一些关于这个主题的非常基础的课程,所以请查看它们。当然,不要停留在 w3schools 上,但这是了解主题的好方法。

为了快速参考,这里是一个 mysqli 的连接设置;

$con = new mysqli('database','username','password','database');

也就是说,让我们看一些查询。

首先,我假设您的连接代码已经设置了一个 mysqli 连接供我们使用,我还假设您有方便 mysqli 的 api 文档,并打开了自动提交以便我们t 处理交易(初学者真的想远离的事情)

让我们插入一个统计数据

//先看用户是否存在,在getstat($id)里面

if(getstat($id) !== false){//a user was found via getstat($id), note the type check
    $stmt = $con->prepare('UPDATE `stat_table` SET=stat_user WHERE id=:id');
}
else{
    $stmt = $conf->prepare('INSERT INTO `stat_table` VALUES('','users name','some other column value');
}
$stmt->bind_param('n',':id');
$stmt->execute();
$stmt->close();

//现在,让我们实现getstat,这将相当简单

$stmt = $con->prepare('SELECT * FROM `stat_table` WHERE id=:id');
$stmt->bind_param('n',':id');
$stmt->execute();


if($stmt->num_rows == 1){//user exists and here is the data!!
    $stmt->bind_result($id,$users_name,$some_other_value);//one variable for each column returned
    $result_row = $stmt->fetch();
    printf('id: %n and user_name: %s and some_other_value: %s\n',$id,$users_name,$some_other_value);
    $stmt->close();//don't leave me hangin guys
    return $result_row;//because the user exists and we output their info! Yay!! We're also going to return the row as an object so that whoever called this function can use the data. Since this is non null a simple if($result_row) will return true.
} else { //nope, user doesn't exist (0 rows returned), so we need to inform the system
    return false;//this is why setstat has a type check in it, since we can return two types of data, one object, one boolean.
}

注意:此代码假定执行无错误,并且您手边有 mysqli api 文档并且可以阅读它们。它还可能包含语法和使用错误,因为我写得很快:)

说明:我们在这里所做的概述了 SQL 中一些非常常见的操作。首先,我们需要使用 SELECT 语句根据 ID 抓取一行数据。出于安全原因,我们将使用准备好的语句对象将 ID 中的潜在恶意代码替换为干净的数字以进行查找。

然后,基于此,我们将运行 UPDATE 语句将 stat 设置为新值,或者运行 INSERT 语句来实际添加该行和 stat。这一切都使用准备好的语句,如果您是 SQL 和数据库系统的新手,您可能会发现它有点高级,但出于安全原因,它非常重要。查看 api 并在 wikipedia 上阅读它们。

那么,为什么是答案之书?坦率地说,您似乎没有牢牢掌握 SQL“语言”(我把它放在引号中,因为它在不同的 DBMS 中的用法略有不同),我们在这里学习。所以,我不只是为你编写代码,而是想给你一些解释,即使这已经得到了回答:)

我希望这对您现在以及您未来的努力有所帮助!

【讨论】:

    【解决方案2】:

    这里是一个带有 mysql_ 函数的示例(但您需要使用mysqli 来实现它,mysql_* 函数已被删除并将被弃用):

    function getstat($user_id)
    {
     $result = mysql_query("SELECT * FROM user_stats WHERE stat_id=".mysql_real_scape_string($user_id));
     $row = mysql_fetch_array($result);
     return $row['fieldNeeded'];
    }
    

    在第二个函数中,您还需要传递具有新统计值的第二个 var。

    function setstat($user_id, $newValue)
    {
     mysql_query("UPDATE user_stats SET fieldUpdated=".mysql_real_scape_string(newValue)." WHERE stat_id=".mysql_real_scape_string($user_id));
    }
    

    【讨论】:

    • 请编辑您的答案以解释 mysql_* 函数至少已被弃用,然后我将删除我的反对票。
    • 我会试试这个
    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2013-12-16
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多