mySQLi没有适当地选择数据

时间:2013-01-18 18:20:21

标签: php mysql mysqli

我正在从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:

......等......

我也明白了 致命错误:调用未定义的方法mysqli_stmt :: mysqli_free()

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

1 个答案:

答案 0 :(得分:0)

我不确定调试部分,但您可能需要在调用$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_rowserror

的更多信息,请参阅PHP文档