【问题标题】:What is causing this "MySQL error #1054 - Unknown column" error?是什么导致了这个“MySQL 错误 #1054 - 未知列”错误?
【发布时间】:2011-02-25 17:38:51
【问题描述】:

我对这个 MySQL 查询有一点问题。我已经使用了我在另一个问题中看到的建议,但仍然不起作用....

这是代码

$kernel->db->query( "UPDATE `" . TABLE_PREFIX . "users` 
                        SET `total_downs` = `total_downs` + 1 
                      WHERE `phcdl_files`.`file_author` = " . $file['file_author'] );

这给了

无效的 SQL 查询
“where 子句”中的未知列“phcdl_files.file_author”(MySQL 错误编号;1054)

【问题讨论】:

  • 你的查询中的表phcdl_files在哪里??
  • 你有一个sql注入漏洞。请使用准备好的查询。请参阅 php 文档中的 PDO。
  • phcdl_files 不是您查询中的表。
  • usersfile_author之间有关系吗?

标签: php mysql sql mysql-error-1054


【解决方案1】:

这意味着表 phcdl_files 中不存在列 file_author。你可能想要

$kernel->db->query( "UPDATE " . TABLE_PREFIX . "users SET total_downs = total_downs + 1 WHERE file_author = " . $file['file_author'] );

编辑:请参阅上面 Byron Whitlock 的评论。您通常不希望将变量直接插入 SQL 查询字符串。

【讨论】:

  • 根据该查询的第一部分,您需要在 WHERE 子句中的 TABLE_PREFIX 末尾添加“用户”。或者,由于它是查询中引用的唯一表中的列,因此只需将表名省略...
  • @djacobson:谢谢,我自己也发现了。
  • @ithcy - 您的第一个版本包含对phcdl_files 的引用,这不是查询中任何地方定义的表。即使您的解释性文字仍在谈论它,现在似乎已被删除!
  • @Martin:我明白了。我以为你的意思是“查询根本没有引用表”:)
  • 哎呀,我的错,太让人头疼了,因为我使用的是文件表的用户名(作者)而不是用户表中的实际用户名
【解决方案2】:

如果phcdl_files 是表的名称,您需要在查询中包含该表,并表达它与TABLE_PREFIXusers 中要更新的行之间的某种关系。

【讨论】:

    【解决方案3】:

    phcdl_files.file_author 在哪里?

     "UPDATE `" . TABLE_PREFIX . "users` 
              SET `total_downs` = `total_downs` + 1 
              WHERE `user`.`file_author` = " . $file['file_author']
    

    并且 $file['file_author'] 应该来自 phcdl_files 表

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2012-10-06
      • 2012-09-21
      • 2010-10-12
      • 2013-10-03
      相关资源
      最近更新 更多