为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕桂英546537 2021-11-26 17:56:25
我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 中所示很好的答案


查看完整回答
反对 回复 2021-11-26
?
素胚勾勒不出你

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


查看完整回答
反对 回复 2021-11-26
  • 2 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信