【发布时间】:2015-01-26 22:40:44
【问题描述】:
我正在尝试以下操作:
$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)。
但是,在使用这个小调整进行测试时,移除绑定...
BETWEEN "2015-06-01" AND "2015-06-01" +
INTERVAL 1 MONTH");
查询成功,结果显示。我认为这是因为服务器收到的中间日期如下所示:
'2015'-'06'-01
所以,我的问题如下:
如何在 PDO 准备好的语句中“转义”或“删除”引号? 应该有一个优雅的方法来解决这个问题。
【问题讨论】:
-
编辑,记录一下:我忘记在我的“调整”中添加引号。 2015-06-01 的两个实例都应该用引号引起来。我已经相应地编辑了我的问题。
标签: php mysql string pdo escaping