gpt4 book ai didi

PHP PDO 语句 : quotes within quotes cause query to fail

转载 作者:行者123 更新时间:2023-11-29 02:58:03 25 4
gpt4 key购买 nike

我正在尝试以下操作:

$stmt = $db->prepare("SELECT * FROM table WHERE date 
BETWEEN :year-:month-01 AND :year-:month-01 +
INTERVAL 1 MONTH");
$stmt->bindValue(':year', $year, PDO::PARAM_STR);
$stmt->bindValue(':month', $_POST["month"], PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

$year 等于 2015 且 $_POST["month"] 等于 06 时,查询应该给出结果,但实际上没有。我可以将 $year 设为 PDO::PARAM_INT,但这仍然给我留下了 $_POST["month"],它是一个字符串(01 .. 12).

但是,当使用这个小调整进行测试时,移除绑定(bind)...

BETWEEN "2015-06-01" AND "2015-06-01" +
INTERVAL 1 MONTH");

查询成功,显示结果。我认为这是因为服务器收到的间隔日期如下所示:

'2015'-'06'-01

所以,我的问题如下:

如何在 PDO 准备好的语句中“转义”或“删除”引号?应该有一种优雅的方法来解决这个问题。

最佳答案

我什至懒得尝试绑定(bind)参数的一部分。此外,您不能重复使用命名参数(在大多数情况下),请参阅 http://php.net/manual/pdo.prepare.php

You cannot use a named parameter marker of the same name more than once in a prepared statement, unless emulation mode is on.

只需绑定(bind)所需的整个值,例如

BETWEEN :start AND :end + INTERVAL 1 MONTH

和...

$date = sprintf('%04d-%02d-01', $year, $month);
$stmt->bindParam(':start', $date);
$stmt->bindParam(':end', $date);

关于PHP PDO 语句 : quotes within quotes cause query to fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com