如何将 mysql_num_rows 等函数更改为 mysqli? [复制]

Posted

技术标签:

【中文标题】如何将 mysql_num_rows 等函数更改为 mysqli? [复制]【英文标题】:How to change mysql_num_rows etc functions to mysqli? [duplicate] 【发布时间】:2019-03-08 07:53:15 【问题描述】:

当我将我的php 文件发布到一个免费的网络托管站点时,我遇到了一个错误。出现的错误如下:

下面是我的项目的代码。

    $sql= "SELECT * FROM user WHERE staff_id='$staff_id' AND password='$password'";
    $query = mysql_query($sql) or die("Error: " . mysql_error());  //this is error on line 42
    $row = mysql_num_rows($query);

我不确定错误是什么,因为我是自学 PHP 的。希望你们能指出我应该做些什么改变。提前致谢!

【问题讨论】:

在您的文本编辑器中,将所有 mysql 替换为 mysqli 您的 mysql_query 还需要数据库连接以及 sql 查询。所以,mysqli_query($dbConnection, $sqlCode) 【参考方案1】:

首先,正如您在标题中所建议的,出于安全原因使用 mysqli,甚至更好的是 PDO。

使用 mysqli:(更新)

$stmt = $conn->prepare("SELECT COUNT(*) FROM user WHERE staff_id = :staff_id AND password = :password");
$res = $stmt->execute(["staff_id" => $staff_id, "password" => $password);
$row = mysqli_num_rows($res);

使用 PDO:

$stmt = $conn->prepare("SELECT COUNT(*) FROM user WHERE staff_id = :staff_id AND password = :password");
$res = $stmt->execute(["staff_id" => $staff_id, "password" => $password);
$row = $res->fetchColumn();

$conn 是您的数据库链接。 PDO 版本假定您不需要行,而只需要计数。如果有人告诉你,不要在 SELECT 查询上使用 rowCount,这是不可靠的。

【讨论】:

感谢您的解释!非常清晰易懂。非常感谢! 您也应该在 mysqli 中使用准备好的语句;只是在最后抛出一个i 并不能让它更安全。 @deceze 你是对的,更新了答案。 太棒了!除了 mysqli 的 prepare 不能那样工作:php.net/manual/en/mysqli.prepare.php @deceze 你不能用 mysqli 将参数放入执行中?【参考方案2】:
    $sql= "SELECT * FROM user WHERE staff_id='$staff_id' AND password='$password'";
$query = mysql_query($sql) or die("Error: " . mysql_error());  //this is error on line 42
$row = mysql_num_rows($query);

试试这个

$sql= "SELECT * FROM user WHERE staff_id='$staff_id' AND password='$password'";
$query = mysqli_query($con, $sql) or die("Error: " . mysqli_error($con)); // $con is the connection to database like  // $con = mysqli_connect("localhost","my_user","my_password","my_db");
$row = mysqli_num_rows($query);

【讨论】:

嗨@ParvejAlam,您能否对您的回答进行更多解释? 谢谢!!我理解这段代码背后的逻辑! 如果您能理解,我将不胜感激。但根据我的意见,新的 php 版本中的语法已更改。 :)

以上是关于如何将 mysql_num_rows 等函数更改为 mysqli? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将此javascript函数更改为Jquery [关闭]

如何将我的代码从回调函数更改为承诺 [重复]

如何将此 pl/sql 更改为函数?

在 C++ 中,主函数是编程的入口点,我如何将其更改为其他函数?

从 SQL 函数获取单个值时,如何将 NULL 更改为 0?

如果在 TableView didSelectRowAtIndexPath 函数中选择了其他行,如何将图像更改为以前的状态?