单引号的Mysql处理冲突

时间:2012-10-15 15:25:02

标签: mysql joomla

我使用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

知道这里出了什么问题吗?

3 个答案:

答案 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