【问题标题】:What's wrong with this SQL query WHERE AND clause?这个 SQL 查询 WHERE AND 子句有什么问题?
【发布时间】:2017-08-30 14:18:27
【问题描述】:

以前,这是有效的:

$patient_story_set_photos = $wpdb->get_results('SELECT * FROM wp_before_after WHERE patientID = '.$post->ID.' AND patient_display = 1');

但是,当我尝试添加另一个这样的 AND 条件时:

$patient_story_set_photos = $wpdb->get_results('SELECT * FROM wp_before_after WHERE patientID = '.$post->ID.' AND patient_display = 1 AND period_taken = '.$set->period_taken);

我在屏幕上收到以下错误:

WordPress database error: [Unknown column '1hour' in 'where clause']
SELECT * FROM wp_before_after WHERE patientID = 8175 AND patient_display = 1 AND period_taken = 1hour

看不出为什么会出现问题,SQL中不允许使用多个AND条件吗?

【问题讨论】:

  • $set->period_taken放在双引号中,因为它不是数字“1小时”

标签: mysql wordpress


【解决方案1】:

问题不是 AND,问题是你的 1hour,1hour unquoted 表示对名为 1hour 的对象(数据库、表)的引用,你需要引用 '1hour'。 如果你写

    SELECT * FROM wp_before_after 
WHERE patientID = 8175 
AND patient_display = 1 
AND period_taken = '1hour'

您会将字段 periodtaken 与等于 '1hour' 的字符串 (CHAR,VARCHAR,TEXT) 进行比较。 我假设 period_taken 是一个类型为 CHAR、VARCHAR 或 TEXT 的字段

【讨论】:

    【解决方案2】:

    在任何事情之前,不要连接 SQL 字符串现在它是 必须(请参阅如何正确地做到这一点https://stackoverflow.com/a/60496/3771219

    您面临的问题是,我认为 period_taken 字段是某种 Char/Varchar/String 字段,当您按“Stringy”字段过滤时,您必须用单引号将文字值括起来:

    SELECT * 
    FROM wp_before_after 
    WHERE patientID = 8175 
    AND patient_display = 1 
    AND period_taken = '1hour'
    

    希望有帮助

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 2022-01-18
      • 2011-01-15
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多