我使用joomla开发网站,但我有一个奇怪的错误。我在以下代码中有语法错误:
$q = "TRUNCATE TABLE ".$db->quote('#__csvi_available_fields');
在运行时提供输出:
TRUNCATE TABLE 'erx_csvi_available_fields'
但是mysql显示错误:
JDatabaseMySQL :: query:1064 - 您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册 正确的语法,以便使用' #__ csvi_available_fields''在第1行 SQL = TRUNCATE TABLE' #__ csvi_available_fields'
奇怪的是,当我没有引号运行时,它运行正常:
TRUNCATE TABLE erx_csvi_available_fields <-- works without problem
知道这里出了什么问题吗?
答案 0 :(得分:3)
不要使用单引号“'”。使用“`”(键盘上的数字)。普通单引号用于字符串,与双引号相同
答案 1 :(得分:3)
正如其他人所说,已经添加了错误的引号。
当使用Joomla的JDatabase
提供引用时,有两个不同的函数可以调用一个用于值,另一个用于数据库,表或列/字段名称。
要使您的示例行正常工作,您需要使用quoteName()
,如下所示:
$q = "TRUNCATE TABLE ".$db->quoteName('#__csvi_available_fields');
$db->quote()
用于引用SQL中使用的值。
您可以通过/libraries/joomla/database/database.php
阅读有关抽象应该如何工作的想法。
答案 2 :(得分:2)
单引号用于字符串,您应该使用反引号作为名称。
来自MySQL manual:
标识符引号字符是反引号(`)
另请参阅此Stackoverflow问题:Using backquote/backticks for mysql queries