1

我正在从 mysql_ 转换为 mysqli。做一些教程。尽管阅读和谷歌搜索该主题,但并没有取得太大的成功。我尝试了一个准备好的语句,但它一直输出 0 个结果(即 now_rows =0 )。当我手动查询 mySQL 表时,会返回许多结果。

mySQLI 5.0.96 已启用

<?
include("conn.php");
// SELECT sql query
$sql = "SELECT id, rotation, assignedRad FROM sched_main WHERE thedate = ?"; 
// perform the query and store the result
$query = $conn->prepare($sql);
$thedate='2013-01-02';
$query->bind_param('s', $thedate);
$query->execute();
// if the $query contains at least one row
if ($query->num_rows > 0) {
  // output data of each row from $query
  while($row = $query->fetch_assoc()) {
    echo '<br /> id: '. $row['id']. ' - name: '. $row['rotation']. ' - pass: '.     $row['assignedRad'];
  }
  $query->free();
}
else {
  echo '0 results';
}
?>

问题2:有没有简单的方法来调试mysqli?使用 mysql_query 我会简单地回显 $sql; 看看 SELECT 语句在我的调试过程中是什么样子的。提前致谢

更新:

这是更新代码的片段,如下所示:

$query->bind_param('s', $thedate);
if (!$query->execute()) {
  die($conn->error);
}
$query->store_result();
// if the $query contains at least one row
if ($query->num_rows > 0) {
  // output data of each row from $query
  while($row = $query->fetch()) {
    echo '<br /> id: '. $row['id']. ' - name: '. $row['rotation']. ' - pass: '. $row['assignedRad'];
  }
  $query->mysqli_free();
}
else {
  echo '0 results';
}

现在它以数组 $row 值作为无值输出:

id: - name: - pass: 
id: - name: - pass: 
id: - name: - pass:

.. ETC...

我也收到致命错误:调用未定义的方法 mysqli_stmt::mysqli_free()

当我尝试 free() 时,我得到:致命错误:调用未定义的方法 mysqli_stmt::free()

4

1 回答 1

0

我不确定调试部分,但您可能需要在调用之前存储 DB 执行调用的结果$query->num_rows。此外,您可能需要检查准备和执行是否成功。

...
if (!$query = $conn->prepare($sql)) {
  die($conn->error);
}
$thedate='2013-01-02';
$query->bind_param('s', $thedate);
if (!$query->execute()) {
  die($conn->error);
}
$query->store_result();
if ($query->num_rows > 0) {
  ...
}

num_rows有关更多信息,请参阅 PHP 文档error

于 2013-01-18T19:41:13.403 回答