iT邦幫忙

0

PDO 使用 LIKE 模糊搜尋,出現錯誤「Invalid parameter number」?

這是我的 model

$stmt = $pdo->prepare(
      "SELECT
      m.*
      FROM `media` as m
      WHERE m.name LIKE :query
      OR m.description LIKE :query
      OR m.tags LIKE :query
      ORDER BY m.add_time DESC "
    );
    $stmt->execute([
      'query' => '%'.$QUERY.'%'
    ]);

    return $stmt->fetchAll();

確定欄位和資料表無誤
$QUERY 值也是有順利傳過來
只是報錯誤「Invalid parameter number」說是這行有問題 'query' => '%'.$QUERY.'%' 我換成了 "%$QUERY%" 也是一樣~
稍微查了一下 stackoverflow 也是這樣的做法
所以有點卡住了
確定資料表有資料可供搜尋
請大大指點,感謝~

2 個回答

0
rogeryao
iT邦研究生 1 級 ‧ 2019-08-14 10:54:18
最佳解答

Invalid parameter number :

SELECT
      m.*
      FROM `media` as m
      WHERE m.name LIKE :query1
      OR m.description LIKE :query2
      OR m.tags LIKE :query3
      ORDER BY m.add_time DESC 

傳入 query1,query2,query3 試試

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-14 13:57:51 檢舉

對,我現在就是這個做法
原來是不能重複參數

0
海綿寶寶
iT邦超人 1 級 ‧ 2019-08-13 12:34:18

要「一個打十個」的話
得加一列$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
請看網友解答

選我正解

看更多先前的回應...收起先前的回應...
小松菜奈 iT邦研究生 4 級 ‧ 2019-08-13 12:36:51 檢舉

這一列是什麼作用?我有設定這個只是我是 false

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-13 12:37:41 檢舉

也就是說不能有兩個以上相同的 :query

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-13 13:19:05 檢舉

我發現好像有衝突⋯⋯我改成 true 後,有些 model 就壞了

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-13 13:34:02 檢舉

我開了 true 後
這個 model 壞了

$stmt = $pdo->prepare(
      "SELECT
      u.*,
      p.*
      FROM `user` as u
      JOIN `permission` as p ON p.permission_id = u.permission_id
      WHERE u.id = :id
      AND u.permission_id > 1
      AND u.block = 0 "
    );
    $stmt->execute([
      'id' => $_SESSION['admin-id']
    ]);

    return $stmt->fetch();

這是哪裡有問題?
開回 false 就好了

小松菜奈 iT邦研究生 4 級 ‧ 2019-08-13 14:25:58 檢舉

看起來 true 是強制 execute

我要發表回答

立即登入回答