我在准备好的陈述方面遇到了一些麻烦。基本上,这个查询没有返回任何行,即使我知道这个查询应该返回多行。我认为这只是一个问题,因为SQL注入,但也许我在做其他错误,我不知道。如果我检查有多少行,我会收到一个错误:
PHP致命错误:调用成员函数fetch_array()
任何帮助将不胜感激!
$stmt = $mysqli->prepare("SELECT sid from SDS WHERE uid=? AND dst=?");
$stmt->bind_param('ss',$username,$structureType);
$stmt->execute();
$stmt->bind_result($results);
$stmt->fetch();
if ($results) {
if($results->num_rows == 0) {
print("No results here.");
return 0;
}
$recordnames = array();
while ($next_row = $results->fetch_array()) {
$recordnames[] = $next_row['sid'];
}
return $recordnames;
}
答案 0 :(得分:0)
当你使用$ stmt-> bind_result($ result);您正在将数据库中的sid绑定到变量$ results。因此,您无法执行以下操作:
if($results->num_rows == 0) { //... }
或
$results->fetch_array();
我就是这样做的:
<?php
$stmt = $mysqli->prepare("SELECT sid from SDS WHERE uid=? AND dst=?");
$stmt->bind_param('ss', $username, $structureType);
$stmt->execute();
$stmt->bind_result($sid);
$stmt->store_result();
if ($stmt->num_rows == 0)
{
print("No results here.");
$stmt->close();
return 0;
}
else
{
$recordnames = array();
while($stmt->fetch())
{
$recordnames[] = $sid;
}
return $recordnames;
}
?>
这种方式使用不同的逻辑,检查行计数是否为0,如果是,则显示“此处没有结果”,如果没有将结果放入数组中。