我PDO prepared statements用來執行兩個查詢:SELECT count(*) FROM vocabulary WHERE `type` = :type AND `lesson` = :lesson;SELECT * FROM vocabulary WHERE `type` = :type AND `lesson` = :lesson limit 100;獲取計數的第一個查詢按預期工作,我得到了行數。$stmt = $this->connection->prepare($sql);foreach ($params as $key => $value) $stmt->bindValue(":" . $key, $value, PDO::PARAM_STR);$stmt->execute();$count = $stmt->fetchColumn();$sql .= " limit $limit;";$sql = str_replace("count(*)", $columns, $sql);$stmt = $this->connection->prepare($sql);$stmt->execute();$result = $stmt->fetchAll(PDO::FETCH_CLASS, $class);但是在執行第二個查詢時,我得到:SQLSTATE[HY093]: Invalid parameter number: no parameters were bound因此,我想知道,如果我有多個參數完全相同的查詢,是否需要再次使用綁定相同的參數foreach ($params as $key => $value) $stmt->bindValue(":" . $key, $value, PDO::PARAM_STR);或者如果有辦法只綁定一次參數。
2 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
如果我有多個參數完全相同的查詢,我是否需要再次使用綁定相同的參數
是的當然。
參數綁定到每個查詢,而不是全局 PDO 或數據庫。
附帶說明一下,使用 PDO,您不必顯式綁定變量,因此您的“問題”有一個解決方案:根本不綁定,而是將數據直接發送到 execute(),如 Dharman 中所示很好的答案

素胚勾勒不出你
TA貢獻1827條經驗 獲得超9個贊
無需像這樣修改您的 SQL。您的代碼基本上歸結為:
$stmt = $this->connection->prepare('SELECT count(*) FROM vocabulary WHERE `type` = :type AND `lesson` = :lesson');
$stmt->execute($params);
$count = $stmt->fetchColumn();
$stmt = $this->connection->prepare('SELECT * FROM vocabulary WHERE `type` = :type AND `lesson` = :lesson limit 100');
$stmt->execute($params);
$result = $stmt->fetchAll(PDO::FETCH_CLASS, $class);
- 2 回答
- 0 關注
- 202 瀏覽
添加回答
舉報
0/150
提交
取消