簡體   English   中英

Joomla db->查詢。 填充查詢對象時,引號類型之間有什么區別

[英]Joomla db->query. What is the difference between quote types when filling query object

我在Joomla 3.x下工作

構建查詢對象有許多不同的解決方案。

最近的文檔似乎更喜歡這種方法:

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

在類似的頁面中有一些名為“完全引用”的exapmles:

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

直截了當的方法:

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

這種方法有什么區別?

什么時候,其中一個不起作用,但其他方法可以成功執行?

所有這些方法都會起作用,只要您堅持使用不同於驅動程序或不關心多支持的SQL的那些方面。

但請注意,您的三個示例並不等同,因為您在前兩個中將999999視為字符串,而在最后一個中將其視為整數。

一般情況下,如果您完全關心多數據庫支持,或者如果您想確保您的查詢不會因為您不小心使用保留字作為字段名稱並且沒有正確引用它而導致查詢失敗,那么第一個示例是最好的(可能根據您的意思是9999999或'999999' )。

這就是原因

  • 所有名稱都是帶有正確標記類型的引號。
  • 事情將被正確轉義(除非你不說)。
  • 所有字符串都被正確引用
  • 它適用於所有受支持的數據庫。
  • 當您需要修改該查詢時,很容易正確添加其他語句,因為JDatabaseQuery無論您將語句置於何處,都能正確地將它們組合在一起。

就報價類型之間的區別而言,在SQL驅動程序中,反引號和單引號之間通常存在差異, $db->quote()為您提供單引號, $db->quoteName()為您提供反引號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM