php - 摆脱 db_query() drupal 中的单引号

标签 php mysql drupal drupal-7

我需要执行以下查询

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/

相关文章:

mysql - 如何使用针对 Mysql 中第二个表中的值的附加查询设置真/假值?

Drupal 以编程方式为节点设置术语

javascript - Drupal - Devel Themer 未显示

security - 防止 Drupal 中的漏洞利用

php - 测试是否已经存在

php - 它是一个简单的循环,但我不知道该怎么做

php从excel表获取数据到mysql(如何避免第一行?)

php - Mysql 仅返回具有 n 个属性匹配的项目

php - 使用 facebook graph api 选择特定字段

php - 如何在 Swift 中处理 PHP 错误