准备好的语句在与 sql 函数绑定时不起作用
Prepared statement not working when binding it with sql functions
架构
id Primary int(11) No None AUTO_INCREMENT
creation_date_time datetime
exp int(11)
代码
$now = 'now()';
$interval2 = 'now() + Interval 2 day';
$interval1 = 'now() + Interval 1 day';
if($stmt = $conn->prepare("SELECT * FROM xx WHERE creation_date_time >= ? AND creation_date_time <= ? AND creation_date_time > ?")) {
$stmt->bind_param("sss", $now, $interval2, $interval1);
$stmt->execute();
$result = $stmt->get_result();
print_r($result);
}
它在没有准备好的语句的情况下工作。
为什么这不起作用,在这种情况下是否需要使用准备好的语句?
它不起作用,因为您试图参数化 SQL 代码,而不仅仅是一个变量值。因此它被视为文本而不是代码。
由于您没有在查询中包含可变输入数据,因此在这种情况下根本不需要使用参数。
架构
id Primary int(11) No None AUTO_INCREMENT
creation_date_time datetime
exp int(11)
代码
$now = 'now()';
$interval2 = 'now() + Interval 2 day';
$interval1 = 'now() + Interval 1 day';
if($stmt = $conn->prepare("SELECT * FROM xx WHERE creation_date_time >= ? AND creation_date_time <= ? AND creation_date_time > ?")) {
$stmt->bind_param("sss", $now, $interval2, $interval1);
$stmt->execute();
$result = $stmt->get_result();
print_r($result);
}
它在没有准备好的语句的情况下工作。 为什么这不起作用,在这种情况下是否需要使用准备好的语句?
它不起作用,因为您试图参数化 SQL 代码,而不仅仅是一个变量值。因此它被视为文本而不是代码。
由于您没有在查询中包含可变输入数据,因此在这种情况下根本不需要使用参数。