我在准备语句时遇到了一些问题。基本上,这个查询不返回任何行,尽管我知道这个查询应该返回多行。我以为这只是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;
}
当您使用$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,如果是,则显示"此处没有结果",如果不是,则将结果放入数组。