我在哪里需要在我的MYSQL查询中使用反引号或引号?

时间:2012-01-02 19:27:39

标签: php mysql

我正在尝试运行以下查询,但我不确定我的应该是不是,$ form_id =记录的列,$ user_id是名为cf_id的记录的主键。

$ querydate将在稍后的脚本中回显,因为它从等于$ form_id和$ user_id的记录中提取日期。

$querydate = mysql_query("SELECT '$form_id' FROM email_history WHERE cf_id = '$user_id'") or die(mysql_error());

编辑>>>>>>

在尝试了下面的一些解决方案之后,它似乎工作正常,但是我没有在表单名称下存储日期,而是得到了回声,所以我不确定现在发生了什么: :资源ID#120 :资源ID#121 :资源ID#122 :资源ID#123

该表的设置类似于以下内容:

[USER_ID] [FORM_ID1212212]  [FORM_ID1212112]  
 [1]      [2-1-2012]        [2-1-2012]       
 [2]      [1-1-2012]        [1-1-2012]       

3 个答案:

答案 0 :(得分:6)

对表名和列名使用反引号(`),对字符串使用单引号(')。

$querydate = mysql_query("SELECT `$form_id` FROM email_history WHERE cf_id = '$user_id'"); 

仅当您的表名或列名是MySQL保留字时才需要反引号...最佳做法是避免使用保留字

但也考虑切换到PDO并使用预处理语句,或者至少使用mysqli而不是mysql

答案 1 :(得分:1)

最佳做法是:

"SELECT `$form_id` FROM `email_history` WHERE `cf_id` = '$user_id'"

应该在字段名称和表名称(以及数据库名称)周围使用反引号,并且应该在值周围使用引号。

答案 2 :(得分:1)

你应该:

  1. 确保$form_id是合法的表名,尤其是,如果它是从用户提供的输入生成的。

  2. 使用$user_id

  3. 的绑定参数

    e.g:

    $sql = "SELECT `$userid` FROM `email_history` WHERE `cf_id` = ?"
    $res = $db->query($sql, array($user_id));
    while ($row = $res->fetchRow()) {
       ...
    }
    

    反向标记适用于所有表名和列名。遗憾的是,您无法在参数化查询中使用变量列名称,因此您需要手动构建查询的该部分。