是否可以在准备好的 mysqli 语句中多次使用一个参数,并且仅绑定一次?
像这样的东西
$stmt = $mysqli->prepare(SELECT * FROM user WHERE age BETWEEN ?1 - 2 AND ?1 + 2);
$stmt->bind_param('i', $myAge);
我认为这可以用
PDO
实现,但我不知道如何用 mysqli
做到这一点。
你可以用这个代替
$stmt = $mysqli->prepare(SELECT * FROM user WHERE age BETWEEN ? - 2 AND ? + 2);
$stmt->bind_param('ii', $my_age, $my_age);
从 PHP 8.1 开始,您可以使用不带 bind_param 的执行。我正在使用 array_fill 来实现这一点。
$stmt->execute(array_fill(0, 1, $myage));
您可以根据语句编辑 array_fill 值,假设您有 3 个值要填充,您可以使用:
$stmt->execute(array_fill(0, 2, $myage));
我使用这个解决方案:
$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;");