【发布时间】:2017-01-18 02:45:50
【问题描述】:
所以我有一些代码
//passed as function param
$clause[2] = "'2016-09-09' AND '2016-09-09'"
$sql = "SELECT {$columns} FROM `{$table}` WHERE `{$clause[0]}` {$clause[1]} :clause";
$stm = $this->db->prepare($sql);
$stm->bindValue("clause", $clause[2]);
if ($stm->execute()) {
return $stm->fetchAll(PDO::FETCH_OBJ);
}
d
//echo'd $sql
SELECT * FROM `deliveries` WHERE `delivery-date` BETWEEN :clause
如果我将$sql 中的:clause 替换为原始输入'2016-09-09' AND '2016-09-09',那么它可以正常工作。一旦我尝试使用 :clause 或使用 ? 绑定它,它就会失败。我不知道该怎么办:(谢谢你的帮助!
【问题讨论】:
-
你知道表达式和值的区别吗?您只能绑定值。没有其他的。没有表名,没有列名,没有一些随机构造的动态 SQL。它是如此微不足道,以至于使人们感到困惑。这个想法是你提供了很好的 SQL,然后你告诉 MySQL “嘿,我想要值”,然后你以
:param_name的形式放置很好的占位符,MySQL 强制,将值视为 string / int 并粘贴整个东西到磁盘。另外,您是否知道composer和大量的库可以帮助您忘记手动执行此 PDO 的事情? -
感谢您的回复,现在完全清楚了:) 没有我应该意识到的表达哈哈。感谢您的澄清!
-
嗯,很高兴我能帮上忙。现在去构建一些很棒的东西:)