我正在尝试使用ajax,mysql和php为库创建一个实时搜索框。我已经实现了对书籍的搜索。即当您输入图书的标题时,它会显示建议。但是,我正在尝试为我的数据库中的authors列实现它,这样当您键入作者的名称时,它会显示作者从数据库中编写的书籍,但我似乎没有得到第4行的mysql语句正确。请帮忙。
<?php
include('config.php');
$s1=$_REQUEST["n"];
$sql="SELECT * from books where (Title like '%".$s1."%') OR (Author like '%'.s1.'%')";
$result=mysqli_query($conn,$sql);
$s="";
答案 0 :(得分:0)
<?php
include('config.php');
$s1=$_REQUEST["n"];
$sql="SELECT * from books where `Title` like '%".$s1."%' OR `Author` like '%".$s1."%')";
$result=mysqli_query($conn,$sql);
答案 1 :(得分:0)
您的查询代码行中有一些错误的引号以及缺少$
。所以你需要改变
Author like '%'.s1.'%'
要: -
Author like '%".$s1."%'
注意: - 对于 SQL INJECTION
,您的查询是开放式的。请尝试使用 prepared statements
强>
参考: -
答案 2 :(得分:0)
<?php
include('config.php');
$s1=$_REQUEST["n"];
$sql="
SELECT
b.*
FROM
books AS b
JOIN
(
SELECT
id
FROM
books
WHERE
Title like ?'
UNION
SELECT
id
FROM
books
WHERE
Author like ?
) AS v
ON b.id = v.id
";
$stmt = mysqli_prepare($conn,$sql);
$stmt->bind_param("ss", '%'.$si.'%', '%'.$si.'%');
$stmt->execute();
$stmt->store_result();
$resultrow = array();
$stmt->bind_assoc($stmt, $resultrow);
while($stmt->fetch())
{
print_r($resultrow);
}
实际上没有表现更好,或者性能上的废话。如果你在只有ID的子查询中执行它,那么通过执行联合创建的临时表很小,然后加入并拉动你想要的东西,排序等......它应该快几倍,如果你有几百万条记录。