我需要执行以下查询
switch($interval) {
case "1 month":
$interval = "1 month";
break:
case "1 year":
$interval = "1 year";
break:
}
db_query("SELECT fid FROM file_managed WHERE FROM_UNIXTIME(TIMESTAMP) <= DATE_SUB(NOW(), INTERVAL :interval)", array(":interval" => $interval))
此查询引发 SQL 错误,因为您可以看到在“1 个月”周围添加了单引号
执行的查询: 从 file_managed WHERE FROM_UNIXTIME(TIMESTAMP) <= DATE_SUB(NOW(), INTERVAL '1 个月') 中选择 fid
预期查询: 从 file_managed WHERE FROM_UNIXTIME(TIMESTAMP) <= DATE_SUB(NOW(), INTERVAL 1 个月) 中选择 fid
关于如何摆脱单引号有什么想法吗?
最佳答案
如果您有 $interval 变量的可信参数值(例如,它不是来自用户而是您填写的),您可以将其放置在 sql 字符串中而不是绑定(bind)它,如下所示:
$interval = "1 year";
db_query("SELECT fid FROM file_managed WHERE FROM_UNIXTIME(TIMESTAMP) <= DATE_SUB(NOW(), INTERVAL {$interval})");
它将运行下一个 SQL 查询:
string(95) "SELECT fid FROM file_managed WHERE FROM_UNIXTIME(TIMESTAMP) <= DATE_SUB(NOW(), INTERVAL 1 year)"
(在sql字符串周围使用双引号而不是单引号,让PHP解释器计算嵌套变量)
关于php - 摆脱 db_query() drupal 中的单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36383950/