簡體   English   中英

多個LIKE在PDO(PHP)中不起作用

[英]multiple LIKE does not work in PDO (PHP)

嘿,我在PDO函數中有此功能,我想用相同的輸入($ string)檢查數據庫的2列。 這來自我的HTML搜索框。 我希望將結果放在一個數組中。 但是,使用此代碼,它僅檢查genre列而不是name列。 但是它應該檢查兩列。 有什么幫助嗎? 謝謝。

public function search($string){
    $question = '%' . $string . '%';
    $sql = "SELECT * FROM `products` WHERE `name` OR `genre` LIKE :q";
    $stmt = $this->pdo->prepare($sql);
    $stmt->bindValue(':q', $question);
    $stmt->execute();
    $data = '%$data%';
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

使用此查詢時出現此錯誤:

$sql = "SELECT * FROM `products` WHERE `name` like :q OR `genre` LIKE :q";

致命錯誤:/Applications/MAMP/htdocs/bad/bad/dao/ProductsDAO.php:32中未捕獲的異常'PDOException',消息為'SQLSTATE [HY093]:無效的參數編號',堆棧跟蹤:#0 / Applications / MAMP / htdocs /bad/bad/dao/ProductsDAO.php(32):PDOStatement-> execute()#1 /Applications/MAMP/htdocs/bad/bad/controller/ProductsController.php(24):ProductsDAO-> search('pokemon' )#2 [內部功能]:ProductsController-> index()#3 /Applications/MAMP/htdocs/bad/bad/controller/Controller.php(9):call_user_func(Array)#4 / Applications / MAMP / htdocs / bad /bad/index.php(50):Controller-> filter()#5 {main}在第32行的/Applications/MAMP/htdocs/bad/bad/dao/ProductsDAO.php中引發

您的查詢沒有將值傳遞給Where子句,只有列名。 我還編輯了將參數傳遞給執行的方式。

您遇到的錯誤是由於(文檔摘錄)造成的:

調用PDOStatement :: execute()時,對於要傳遞給語句的每個值,必須包含一個唯一的參數標記。 您不能在准備好的語句中兩次使用相同名稱的命名參數標記。 您不能在例如SQL語句的IN()子句中將多個值綁定到單個命名參數。

所以我已經編輯了答案。

嘗試這個:

修改以下行:

$sql = "SELECT * FROM `products` WHERE `name` OR `genre` LIKE :q";
$stmt->bindValue(':q', $question);
$stmt->execute();

為此:

$sql = "SELECT * FROM `products` WHERE `name` LIKE :name OR `genre` LIKE :genre";
$params = array('name' => $question, 'genre' => $question); //or :name and :genre
$stmt->execute($params);

如果仍然出現錯誤,請查看其中包含一些示例的文檔。 PHP PDOStatement :: execute文檔

嘗試這個:

public function search($string){
    $question = "%".$string."%";
    $sql = "SELECT * FROM `products` WHERE `name` LIKE :n OR `genre` LIKE :q";
    $stmt = $this->pdo->prepare($sql);
    $stmt->bindValue(':q', $question);
    $stmt->bindValue(':n', $question);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

暫無
暫無

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

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