猿问

PDO 准备语句为不同的查询绑定一次参数

我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);

或者如果有办法只绑定一次参数。


慕桂英546537
浏览 183回答 2
2回答

达令说

如果我有多个参数完全相同的查询,我是否需要再次使用绑定相同的参数是的当然。参数绑定到每个查询,而不是全局 PDO 或数据库。附带说明一下,使用 PDO,您不必显式绑定变量,因此您的“问题”有一个解决方案:根本不绑定,而是将数据直接发送到 execute(),如 Dharman 中所示很好的答案

素胚勾勒不出你

无需像这样修改您的 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);
随时随地看视频慕课网APP
我要回答