我想使用准备好的语句创建一个 php 脚本来查询我的数据库中的表并以 json 格式返回结果。我有一张医生表,我想返回给定专业的医生。我有一个脚本版本,它不使用可以正常工作的准备好的语句。但是当我使用准备好的语句时,我的脚本不起作用。
非准备好的语句版本:
<?php
// include database constants
require_once("../config/config.php");
// create db connection
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$mysqli->set_charset("utf8");
$speciality = $_POST['speciality'];
$query = "SELECT * FROM `doctors` WHERE speciality='$speciality'";
$result = $mysqli->query($query) or die("Error executing the query");
while($row = $result->fetch_assoc()) {
$output[]= $row;
}
print(json_encode($output));
$mysqli->close();
?>
准备好的报表版本:
<?php
// include database constants
require_once("../config/config.php");
// create db connection
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$mysqli->set_charset("utf8");
$speciality = $_POST['speciality'];
$query = "SELECT * FROM `doctors` WHERE speciality=?";
if ($stmt = $mysqli -> prepare($query)){
$stmt -> bind_param("s", $speciality);
$stmt -> execute();
$result = $stmt -> get_result();
while($row = $result -> fetch_assoc()) {
$output[]= $row;
}
print(json_encode($output));
$stmt -> close();
} else {
echo $mysqli->error;
echo "no entry found";
}
$mysqli->close();
?>
我究竟做错了什么?我没有收到 mysqli 错误,这意味着问题出在查询执行之后,但我只是不知道它是什么。
编辑:我说它不起作用的意思是我没有得到任何回报。执行后页面的html body是完全空的。另一方面,如果我使用我发布的其他脚本(没有准备好的语句),我会得到预期的结果。