首頁  >  文章  >  後端開發  >  為什麼我的 PHP PDO 準備語句與 MySQL LIKE 查詢沒有回傳結果?

為什麼我的 PHP PDO 準備語句與 MySQL LIKE 查詢沒有回傳結果?

DDD
DDD原創
2024-10-31 10:41:021017瀏覽

Why does my PHP PDO prepared statement with MySQL LIKE query return no results?

PHP PDO 準備語句- MySQL LIKE 查詢

問題:

  • 問題:
  • 使用下列指令執行查詢時PHP 的PDO,搜尋沒有結果。

    查詢:

    <code class="sql">SELECT    hs.hs_pk, 
              hs.hs_text, 
              hs.hs_did, 
              hd.hd_did, 
              hd.hd_text, 
              hv.hv_text, 
              hc.hc_text 
    FROM      hs 
    LEFT JOIN hd 
     ON       hs.hs_did = hd.hd_did 
    LEFT JOIN hd 
     ON       hd.hd_vid = hv.hv_id 
    LEFT JOIN hc 
     ON       hd.hd_pclass = hc.hc_id
    WHERE     hs.hs_text LIKE "%searchTerm%"
    LIMIT 25;</code>

    PHP 程式碼:

    <code class="php">$sql = 
    'SELECT   hs.hs_pk, 
              hs.hs_text, 
              hs.hs_did, 
              hd.hd_did, 
              hd.hd_text, 
              hv.hv_text, 
              hc.hc_text 
    FROM      hs 
    LEFT JOIN hd 
     ON       hs.hs_did = hd.hd_did 
    LEFT JOIN hd 
     ON       hd.hd_vid = hv.hv_id 
    LEFT JOIN hc 
     ON       hd.hd_pclass = hc.hc_id
    WHERE     hs.hs_text LIKE :searchTerm
    LIMIT 25';
    
    $prep = $dbh->prepare($sql);
    $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>

    解決方案錯誤在於execute()方法中指派給:searchTerm參數的值。使用預備語句時不需要雙引號。

    修正的 PHP 程式碼:

    <code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
    說明:

    預備語句處理資料與查詢分開語句處理資料與查詢分開語句。它們不執行字串替換。僅當將值直接嵌入到查詢中時才會添加引號。

  • 以上是為什麼我的 PHP PDO 準備語句與 MySQL LIKE 查詢沒有回傳結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn