我在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';
";
这种方法有什么区别?
何时,其中一个不起作用,但其他方法可以成功执行?
答案 0 :(得分:4)
只要您坚持使用不同于驱动程序或不关心多支持的SQL的那些方面,所有这些方法都会起作用。
但请注意,您的三个示例并不相同,因为您将前9个字符串视为前两个字符串,并将最后一个中的字符串视为整数。
一般情况下,如果你完全关心多数据库支持,或者如果你想确保你的查询不会因为你不小心使用保留字作为字段名称并且没有正确引用那么查询,那么第一个例子是最好的(可能根据你的意思是9999999或'999999'
进行修改)。
这就是为什么
就报价类型之间的区别而言,在SQL驱动程序中,反引号和单引号之间通常存在差异,$db->quote()
为您提供单引号,$db->quoteName()
为您提供反引号。