0

我正在使用自动完成,其中建议来自数据库并且工作正常,但是我尝试将其更改为 mysqli 但它不起作用。它没有显示任何建议;没有错误。

  1. 我在 mysqli 端缺少什么?
  2. 我怎样才能添加更多的表(我有 40 个表)?谢谢。

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);

?>
4

1 回答 1

0

首先,乔纳森建议在术语中添加通配符('%')是正确的。您的错误是在循环中使用变量$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);

?>

PS:确保您的查询首先有效。而且,您在$row['columnName']中使用的列实际上是存在的。

于 2013-09-14T03:44:10.113 回答