簡體   English   中英

我如何在MySQL PHP中使用OR語句

[英]How can I use OR statement in mysql php

我正在嘗試使用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="";
<?php
include('config.php');
$s1=$_REQUEST["n"];
$sql="SELECT * from books where `Title` like '%".$s1."%' OR `Author` like '%".$s1."%')";
$result=mysqli_query($conn,$sql);

查詢代碼行中的引號放錯了位置,並且缺少$ 所以你需要改變

Author like '%'.s1.'%'

至:-

Author like '%".$s1."%'

注意:-您的查詢對SQL INJECTION是開放的,因此請嘗試使用prepared statements

參考:-

mysqli ::准備

PDO ::准備

我個人不喜歡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);
}

實際上,沒有哪個性能更好,或者“ OR”對性能沒有好處。 如果您僅使用ID在子查詢中執行此操作,那么通過合並創建的臨時表就很小了,然后只需聯接並提取所需的內容,進行排序等即可,而且速度應該快幾倍,如果您有幾百萬條記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM