在准备好的 mysqli 语句中多次使用一个参数

问题描述 投票:0回答:4

是否可以在准备好的 mysqli 语句中多次使用一个参数,并且仅绑定一次
像这样的东西

$stmt = $mysqli->prepare(SELECT * FROM user WHERE age BETWEEN ?1 - 2 AND ?1 + 2);
$stmt->bind_param('i', $myAge);

我认为这可以用

PDO
实现,但我不知道如何用
mysqli
做到这一点。

php mysqli prepared-statement param
4个回答
7
投票

只是为了结束问题:

答案是

如果您只想绑定一个参数一次并且在查询中多次使用它,您必须使用 PDO,这可能还需要特殊配置。

但是根据this很好的答案或this,似乎有更多理由使用PDO而不是mysqli。

但肯定有解决方法。请参阅此问题的其他答案。


3
投票

你可以用这个代替

$stmt = $mysqli->prepare(SELECT * FROM user WHERE age BETWEEN ? - 2 AND ? + 2);
$stmt->bind_param('ii', $my_age, $my_age);

1
投票

从 PHP 8.1 开始,您可以使用不带 bind_param 的执行。我正在使用 array_fill 来实现这一点。

$stmt->execute(array_fill(0, 1, $myage));

您可以根据语句编辑 array_fill 值,假设您有 3 个值要填充,您可以使用:

$stmt->execute(array_fill(0, 2, $myage));

0
投票

我使用这个解决方案:

$stmt = $mysqli->prepare("SET @age := ?;");
$stmt->bind_param('i', $myAge);
$stmt->execute();

$stmt = $mysqli->query("SELECT * FROM user WHERE age BETWEEN @age - 2 AND @age + 2;");
© www.soinside.com 2019 - 2024. All rights reserved.