簡體   English   中英

在准備好的語句中,mysqli select語句中的LIKE / OR運算符存在問題

[英]Issue with LIKE/OR operator in mysqli select statement in a prepared statement

我正在創建一個簡單的mysqli准備好的語句,該語句根據搜索從數據庫中選擇記錄。 我想使用提交的同一搜索詞在數據庫表中搜索兩個不同的列,以查找標題或內容詳細信息中的任何匹配項。 我一直在Lynda.com上觀看帶有David Powers的使用面向對象的PHP訪問數據庫的視頻,並對該教程進行調整以適應我的需求。 我大部分工作正常,但是在sql語句中添加第二個變量時遇到問題。 問題是它不返回任何行。 這是我的代碼:

$sql = "SELECT id, heading, details, layout FROM content WHERE ( details LIKE ? OR heading LIKE ? )";
    $stmt = $db->stmt_init();
    if (!$stmt->prepare($sql)) {
        $error = $stmt->error;
    } else {
        $stmt->bind_param('s', $var1, $var2);
        $var1 = '%' . $_GET['searchterm'] . '%';
        $var2 = '%' . $_GET['searchterm'] . '%';

如果我在SQL中刪除第一個占位符之后的部分,並從$ stmt-> bind_param('s',$ var1,$ var2)中刪除“ $ var2”; 然后查詢工作正常。 例如,以下返回正確的結果:

    $sql = "SELECT id, heading, details, layout FROM content WHERE details LIKE ?";
    $stmt = $db->stmt_init();
    if (!$stmt->prepare($sql)) {
        $error = $stmt->error;
    } else {
        $stmt->bind_param('s', $var1);
        $var1 = '%' . $_GET['searchterm'] . '%';

一旦添加了第二個變量,就不會返回任何結果。 我也嘗試了以下方法,但也返回0結果:

    $stmt->bind_param('s', $var1, $var1);
    $var1 = '%' . $_GET['searchterm'] . '%';

我是剛准備好的聲明的新手,所以任何建議或指導都將不勝感激。 謝謝。

雖然我對參數綁定不是很熟悉,但是您不應該為每個參數指定類型,即

$stmt->bind_param('ss', $var1, $var2);

暫無
暫無

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

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