我正在尝试运行以下查询,但我不确定我的应该是不是,$ 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]
答案 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)
你应该:
确保$form_id
是合法的表名,尤其是,如果它是从用户提供的输入生成的。
使用$user_id
e.g:
$sql = "SELECT `$userid` FROM `email_history` WHERE `cf_id` = ?"
$res = $db->query($sql, array($user_id));
while ($row = $res->fetchRow()) {
...
}
反向标记适用于所有表名和列名。遗憾的是,您无法在参数化查询中使用变量列名称,因此您需要手动构建查询的该部分。