Joomla db->查询。填充查询对象时,引号类型之间有什么区别

时间:2014-03-17 11:55:41

标签: php mysql sql joomla

我在Joomla 3.x下工作

构建查询对象有许多不同的解决方案。

最近的文档似乎更喜欢这种方法:

$query->select("*")
$query->from($db->nameQuote('#__example_table'))
$query->where($db->nameQuote('id')." = ".$db->quote('999999'));

在类似的页面中有一些名为"完全引用"的原型:

$query = "
  SELECT * 
  FROM ".$db->nameQuote('#__example_table')."  
  WHERE ".$db->nameQuote('id')." = ".$db->quote('999999').";
  ";

直截了当的方法:

$query = " SELECT * 
           FROM #__example_table 
           WHERE 'id' = '999999';
          ";

这种方法有什么区别?

何时,其中一个不起作用,但其他方法可以成功执行?

1 个答案:

答案 0 :(得分:4)

只要您坚持使用不同于驱动程序或不关心多支持的SQL的那些方面,所有这些方法都会起作用。

但请注意,您的三个示例并不相同,因为您将前9个字符串视为前两个字符串,并将最后一个中的字符串视为整数。

一般情况下,如果你完全关心多数据库支持,或者如果你想确保你的查询不会因为你不小心使用保留字作为字段名称并且没有正确引用那么查询,那么第一个例子是最好的(可能根据你的意思是9999999或'999999'进行修改)。

这就是为什么

  • 所有名称都是带有正确标记类型的引号。
  • 事情将被正确转义(除非你不说)。
  • 正确引用所有字符串
  • 它适用于所有受支持的数据库。
  • 当您需要修改该查询时,可以很容易地正确添加其他语句,因为无论您将语句置于何种顺序,JDatabaseQuery都能正确地将它们组合在一起。

就报价类型之间的区别而言,在SQL驱动程序中,反引号和单引号之间通常存在差异,$db->quote()为您提供单引号,$db->quoteName()为您提供反引号。