如何解决 mysql_error()?
How to troubleshoot mysql_error()?
我收到如下所示的 mysql_error()
消息。我不时得到它,只需回顾一下我的语法就可以弄清楚它们。
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near 'key, label, value, description, last_modified, username,
filepath, divid) SELE' at line 1
但是现在我遇到了一个我似乎无法解决的错误,所以我想问一个相当简单的问题。我如何解释 mysql_error()
消息具体来说,当它说 "near".
- 在什么附近?
我到底在看哪里?
- 在查询语句的前端和前面的?
- 还是查询语句的后端及其后面的?
这是我在PHP中的实际查询语句:
mysqli_query($link, '
INSERT INTO ' . DATASTORE . '(key, label, value, description, last_modified, username, filepath, divid)
SELECT key, label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'"
FROM ' . DATASTORE . '
WHERE divid = "' . $source_divid . '"
') or die(mysqli_error($link));
要是这么简单就好了...我想 MySQL 能给你的信息就这么多了。我的建议是仅使用该消息作为错误位置的指南。
我会使用调试器或直接回显 sql,然后使用像 SQLyog 这样的数据库工具来 运行 查询。 SQLYog(或类似的东西)可以格式化查询以使其更具可读性。错误可能是错别字,也可能是括号未正确闭合。
像所有事情一样,它只是通过练习来实现的。
您的错误在 DATASTORE 值中。当您看到 mysql 表示 "near" 时,表示之前。因此,当您收到错误时,请查看 DATASTORE 的值是多少。尝试回显查询而不是执行它以查看它的外观,您将收到错误。
在您的情况下,错误是 DATASTORE 和 (.
同样正如 Perl 和其他人指出的那样,你必须反引号键,因为它是 mysql
的保留字
以这种方式编辑您的查询,它应该有效:
mysqli_query($link, '
INSERT INTO ' . DATASTORE . ' (`key`, label, value, description, last_modified, username, filepath, divid)
SELECT `key`, label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'"
FROM ' . DATASTORE . '
WHERE divid = "' . $source_divid . '"
') or die(mysqli_error($link));
我想是因为你的'key'字段,也就是SQL关键字。使用 '' 或 `` 引用该字段
mysqli_query($link, '
INSERT INTO ' . DATASTORE . '(\'key\', label, value, description, last_modified, username, filepath, divid)
SELECT \'key\', label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'"
FROM ' . DATASTORE . '
WHERE divid = "' . $source_divid . '"') or die(mysqli_error($link));
我收到如下所示的 mysql_error()
消息。我不时得到它,只需回顾一下我的语法就可以弄清楚它们。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key, label, value, description, last_modified, username, filepath, divid) SELE' at line 1
但是现在我遇到了一个我似乎无法解决的错误,所以我想问一个相当简单的问题。我如何解释 mysql_error()
消息具体来说,当它说 "near".
- 在什么附近?
我到底在看哪里?
- 在查询语句的前端和前面的?
- 还是查询语句的后端及其后面的?
这是我在PHP中的实际查询语句:
mysqli_query($link, '
INSERT INTO ' . DATASTORE . '(key, label, value, description, last_modified, username, filepath, divid)
SELECT key, label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'"
FROM ' . DATASTORE . '
WHERE divid = "' . $source_divid . '"
') or die(mysqli_error($link));
要是这么简单就好了...我想 MySQL 能给你的信息就这么多了。我的建议是仅使用该消息作为错误位置的指南。
我会使用调试器或直接回显 sql,然后使用像 SQLyog 这样的数据库工具来 运行 查询。 SQLYog(或类似的东西)可以格式化查询以使其更具可读性。错误可能是错别字,也可能是括号未正确闭合。
像所有事情一样,它只是通过练习来实现的。
您的错误在 DATASTORE 值中。当您看到 mysql 表示 "near" 时,表示之前。因此,当您收到错误时,请查看 DATASTORE 的值是多少。尝试回显查询而不是执行它以查看它的外观,您将收到错误。 在您的情况下,错误是 DATASTORE 和 (. 同样正如 Perl 和其他人指出的那样,你必须反引号键,因为它是 mysql
的保留字以这种方式编辑您的查询,它应该有效:
mysqli_query($link, '
INSERT INTO ' . DATASTORE . ' (`key`, label, value, description, last_modified, username, filepath, divid)
SELECT `key`, label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'"
FROM ' . DATASTORE . '
WHERE divid = "' . $source_divid . '"
') or die(mysqli_error($link));
我想是因为你的'key'字段,也就是SQL关键字。使用 '' 或 `` 引用该字段
mysqli_query($link, '
INSERT INTO ' . DATASTORE . '(\'key\', label, value, description, last_modified, username, filepath, divid)
SELECT \'key\', label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'"
FROM ' . DATASTORE . '
WHERE divid = "' . $source_divid . '"') or die(mysqli_error($link));