【问题标题】:Alternate Way to Check Result num_rows >0检查结果的替代方法 num_rows >0
【发布时间】:2020-06-07 20:57:00
【问题描述】:

到目前为止,我通过以下方式检查 num_rows >0:

$sql = "SELECT name FROM tbl_criteria WHERE ID =?";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
 header("location: /XX");
}else{
 mysqli_stmt_bind_param($stmt, "i", $cId);
 mysqli_stmt_execute($stmt);
 $result = mysqli_stmt_get_result($stmt);
 mysqli_fetch_all($result,MYSQLI_ASSOC);
 if($result-> num_rows >0{
  echo 'Appear if rows >0';
  foreach($result as $row){
   echo 'Appear for each result';
   }
  }
}

突然间,这不再起作用了。我总是得到 0 个结果。我已经读过在访问 num_rows 之前调用mysqli_stmt_store_result() 很重要,否则它通常会返回0。我以为我用$result = mysqli_stmt_get_result($stmt); 存储结果还是我错了? 我将我的网站托管在网络服务器上,因此也可能是因为更新。几天前它工作正常。

【问题讨论】:

标签: php mysql sql mysqli


【解决方案1】:

由于您有多个语法错误,您的代码很可能无法正常工作。我推荐阅读How to get the error message in MySQLi?

如果您想继续使用 mysqli,那么不需要这个过于复杂的代码。您可以简单地将所有结果提取到一个数组中。没有必要使用num_rows

$value = "cId";
$stmt = $conn->prepare("SELECT name FROM tbl_criteria WHERE ID =?");
$stmt->bind_param('s', $value);
$stmt->execute();
$result = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);

// If no rows were fetched the array will be empty and condition will be false
if ($result) {
    echo 'Appear if rows >0';
    foreach ($result as $row) {
        echo 'Appear for each result';
    }
}

【讨论】:

  • 好吧,很抱歉我之前没有正确复制代码。我用 PDO 试了一下,现在得到了下面的代码 $stmt = $conn->prepare("SELECT name FROM tbl_criteria WHERE ID=:criteria"); $stmt->bindParam(':criteria', $cId); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); while($row = $stmt->fetch()) { echo $row['name']; foreach($result as $row){ echo 'test'; } } 这个好还是我可以再次简化代码?
  • @Robin 评论不适合此类讨论。如果您有新问题,则可以在网站上提出新问题。我建议您先阅读这些文章;你可能会学到一些关于使用 PDO 的技巧:phpdelusions.net
  • 好吧,它对我有用,所以我不需要问其他问题,但谢谢
猜你喜欢
  • 2021-10-07
  • 2014-05-10
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
相关资源
最近更新 更多