我正在使用自动完成,其中的建议来自数据库并且它工作正常,但我尝试将其更改为mysqli但它不起作用。它没有显示任何建议;没有错误。
MySQL的:
<?php
mysql_connect("localhost","root","");
mysql_select_db("database");
$term=$_GET["term"];
$query=mysql_query("SELECT * FROM products1 where title like '%".$term."%' order by id ");
$json=array();
while($student=mysql_fetch_array($query)){
$json[]=array(
'value'=> $student["title"],
'label'=>$student["title"]
);
}
echo json_encode($json);
?>
我尝试使用MySQLi编写的语句:
<?php
$mydb = new mysqli('localhost', 'root', '', 'database');
$q = $_POST['term'];
$stmt = $mydb->prepare(" SELECT * from products1 where title LIKE ? ");
echo $mydb->error;
$stmt->bind_param('s', $q);
$stmt->execute();
?>
<?php
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$json[]=array(
'value'=> $student["title"],
'label'=>$student["title"]
);
}
echo json_encode($json);
?>
答案 0 :(得分:0)
首先,Jonathan建议在该术语中添加通配符('%')是正确的。你的错误是在循环中使用变量 $ student 而不是 $ row (反之亦然)。
<?php
$mydb = new mysqli('localhost', 'root', '', 'test');
$q = '%'.$_POST['term'].'%';
$stmt = $mydb->prepare(" SELECT * from products1 where title LIKE ? ");
echo $mydb->error;
$stmt->bind_param('s', $q);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$json[]=array(
'value'=> $row["title"],
'label'=>$row["title"]
);
}
echo json_encode($json);
&GT?;
P.S。:确保您的查询先行。并且,您在 $ row ['columnName'] 中使用的列实际上存在。