我正在尝试使用PHP中的预准备语句在表中搜索特定项目。我没有错误,但也没有记录。这是我的代码:
$items = [];
$search = "john";
if ($stmt = $this->con->prepare("SELECT * FROM phptest WHERE search = ?")) { //'john'";
$stmt->bind_param("s",$search);
$stmt->execute();
while ($row = mysqli_fetch_array($stmt)) {
$item = [];
$item['id'] = $row['id'];
$item['first'] = $row['search'];
$item['last'] = $row['data'];
array_push($items, $item);
}
}
return $items;
现在,当我不使用准备好的陈述时,只需SELECT * FROM phptest
我就可以获得表格中的所有结果(包括搜索项目='约翰&#39)。此外,如果我使用查询SELECT * FROM phptest WHERE search = 'john'
,我会得到一条记录,其中search =' john'
但是一旦我把它变成准备好的声明,我就会得到零错误但是没有记录。我做得到警告:
mysqli_fetch_array()期望参数1为mysqli_result,boolean given
这使我认为我的bind_param
或execute()
返回FALSE,但是当我检查时,它似乎没有返回false。
我开始冒险完成教程https://www.simplifiedcoding.net/android-mysql-tutorial-to-perform-basic-crud-operation/,我认为我完全理解这个教程,但在尝试创建自己的PHP API时遇到了我的错误。
然后我转到手册http://php.net/manual/fr/mysqli.prepare.php,但仍然找不到我的错误。
虽然它已被关闭为"偏离主题,"我查看了PHP bind_param not working,发现没有任何适用于我的情况。
同样,我没有在PHP bind_param not defined或php bind_param is not working中找到错误。
答案 0 :(得分:3)
你非常接近。期望mysqli_fetch_array()
传递一个结果对象,而不是语句对象本身:
$stmt = $conn->prepare(...);
$stmt->bind_param(...);
$stmt->execute();
$result = $stmt->get_result();
while ($row = mysqli_fetch_array($result)) {
或者,以完全面向对象的方式:
while ($row = $result->fetch_array()) {