仅应通过引用传递变量 - 将 LIMIT 与 bindParam 一起使用时
Posted
技术标签:
【中文标题】仅应通过引用传递变量 - 将 LIMIT 与 bindParam 一起使用时【英文标题】:Only variables should be passed by reference - when using LIMIT with bindParam 【发布时间】:2018-06-19 09:14:24 【问题描述】:我想将LIMIT
与bindParam
一起使用,所以我构建了这个查询:
$app->get('/contact/get_contacts/contact_number', function (Request $request, Response $response, array $args)
$query = "SELECT * FROM contact LIMIT :contact_number";
$sql->bindParam("contact_number", intval($args["contact_number"]), PDO::PARAM_INT);
$sql->execute();
$result = $sql->fetchAll();
return $response->withJson($result);
);
我收到此通知:
只有变量应该通过引用传递
我做错了什么?我正在使用Slim Framework
和PDO
【问题讨论】:
bindParam 的第二个参数应该是一个已经存在的变量,而不是函数的结果。将结果存储在变量中,然后在需要时使用它们。 @vuryss 感谢现在工作,但为什么我不能直接这样做? 删除intval
。
因为函数需要在某处存储结果。方法的返回值不是您可以存储值的地方。您试图在 intval 的响应中存储一个值,这是无效的操作。
【参考方案1】:
你需要改变:
$sql->bindParam("contact_number", intval($args["contact_number"]), PDO::PARAM_INT);
与,
$sql->bindParam(":contact_number", $args["contact_number"], PDO::PARAM_INT);
我在参数名称前添加了缺少的:
。
我已删除 intval
函数调用,如果您仍想使用该函数,请在 bindParam
函数调用之外使用它。
根据函数定义:
public bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
绑定参数是variable by reference (&$variable
)。
阅读材料
bindParam
【讨论】:
【参考方案2】:您正在双重处理数据类型。在明确指定PDO::PARAM_INT
时,您不需要intval
。只需删除intval
或查看bindValue
的原因:
$sql->bindValue(":contact_number", intval($args["contact_number"]));
【讨论】:
以上是关于仅应通过引用传递变量 - 将 LIMIT 与 bindParam 一起使用时的主要内容,如果未能解决你的问题,请参考以下文章