【问题标题】:Php $num_rows not working after installing Mysqlnd安装 Mysqlnd 后 PHP $num_rows 不起作用
【发布时间】:2017-05-01 09:33:08
【问题描述】:

我正在努力让我的$num_rows 工作。它一直在工作,现在不行了。阅读这个网站,有人建议我在我的服务器上安装MySqlnd,因为像fetch_arrayget_result 这样的东西不起作用,现在我希望我从来没有安装它。 (我应该卸载它吗?)

我一直在尝试很多不同的方法来尝试让$num_rows 工作 - 以及其他功能 - 我不知道什么是对还是错了。你能帮我吗 ?我得到的错误是:

Fatal error: Call to undefined method mysqli::stmt() in /var/www/html/checkcontact.php on line 34

第 34 行是:$result = $con->stmt($query);

这是我的代码:

<?php

require('dbConnect.php');

//post all contacts in my phone as a JSON array
$json = $_POST['phonenumber'];
//decode the JSON
$array = json_decode($json);
//bind 
 $query = "SELECT * FROM user WHERE username = ?";
 $stmt = $con->prepare($query) or die(mysqli_error($con));
 $stmt->bind_param('s', $phonenumber);

 //for each value of phone_number in the array, call it $phonenumber
    foreach ($array as $value)
    {
        $phonenumber = $value->phone_number;

$stmt->execute();
$result = $con->stmt($query);
//$result = $stmt->get_result(); 
//$stmt->store_result();
//$num_rows = $stmt->num_rows();
 //$result = mysqli_query($con, $query);

 if ($result->$num_rows > 0) {
    //  while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    // while($row = mysqli_fetch_assoc($result)){ 

    // $contact_id = $row['user_id'];
    // echo $contact_id;

    echo "number of phone numbers in the user table is " . $num_rows  . "<br>"; 
     }
 }
 ?>

编辑: 这是我的 dbConnect.php 文件,根据要求:

<?php

define ('HOST', 'localhost');
define ('USER', 'bob');
define ('PASS', 'password');
define ('DB', 'mydb');

$con = NEW MySQLi("localhost", "bob", "password", "mydb");

if ($con->connect_error) {
    die("Connection failed: " . $con->connect_error);
} 

?>

【问题讨论】:

  • 看来问题不在您的$num_rows 方法中。您可以发布 dbConnect.php 文件吗?这就是您的 $con 变量的来源吗? (不要忘记删除密码!)
  • @Clemenz 谢谢,编辑帖子以包含我的 dbConnect.php。

标签: php mysql-num-rows mysqlnd


【解决方案1】:

你的第一个错误是这一行

$result = $con->stmt($query);

您可能想改为get_result()

没有mysqli::stmt() 方法。然后,没有$result-&gt;$num_rows,但它是结果的一个属性,这意味着它应该是$result-&gt;num_rows(松开$)。

通过这些更改进行了修改,这很可能是您的代码应该看起来的样子。

//post all contacts in my phone as a JSON array
$json = $_POST['phonenumber'];
//decode the JSON
$array = json_decode($json);
//bind 
$query = "SELECT * FROM user WHERE username = ?";
$stmt = $con->prepare($query) or die($con->error);
$stmt->bind_param('s', $phonenumber) or die ("MySQLi-stmt binding failed ".$stmt->error);

//for each value of phone_number in the array, call it $phonenumber
foreach ($array as $value) {
    $phonenumber = $value->phone_number;
    $stmt->execute() or die ("MySQLi-stmt execute failed ".$stmt->error);

    if ($stmt->num_rows > 0) { // Check if there are any rows matching this value
        $result = $stmt->get_result(); // Convert from MySQLi_stmt to MySQLi_result (to use fetch_assoc())
        echo "Number of rows matching username '".$value->phone_number."' from user-table is " . $result->num_rows  . " rows.<br>"; 
        while ($row = $result->fetch_assoc()) {
            echo $row['user_id']."<br />";
        }
    } else {
        echo "No rows matching username ".$value->phone_number.".<br />";
    }
}
$stmt->close();

请注意,mysqli_stmt::get_result() 方法需要 mysqlnd 驱动程序。如果您没有该驱动程序,则必须使用 mysqli_stmt::bind_result()mysqli_stmt::fetch() 以不同方式获取结果(除此之外,安装该驱动程序 - 如果安装正确 - 不会影响您的代码)。

【讨论】:

  • +1。现在没有错误,但它转到 else 语句 - 没有匹配的行,即使我的 JSON 数组中有明确的电话号码在我的用户表中。有什么想法吗?
  • 从 MySQL 的角度来看这无关紧要,我首先检查 $value-&gt;phone_number 的值是否完全符合您的预期。
  • 是的,您的代码只是需要修改一下,我会弄清楚的。当我将其更改为 if ($stmt-&gt;num_rows == 0) 时,它会正确回显,很奇怪。感谢您的帮助。
  • 这意味着该用户名没有返回任何行。确实很奇怪。希望它至少对您有所帮助;-) 干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2017-04-09
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多