如何在mysql php

时间:2018-03-10 10:50:47

标签: php mysql

我正在尝试使用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="";

3 个答案:

答案 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

参考: -

mysqli::prepare

PDO::prepare

答案 2 :(得分:0)

个人我不喜欢OR。相反,我更喜欢联盟。嘿,我按小时收到工资(实际上我得到工资)但我还是喜欢过于复杂化。

<?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的子查询中执行它,那么通过执行联合创建的临时表很小,然后加入并拉动你想要的东西,排序等......它应该快几倍,如果你有几百万条记录。