2016-10-14 42 views
1

簡單的問題 - 我不明白,如果我要運行WordPress的這種類型的查詢:當我只是匹配表列時,是否需要在Wordpress中運行準備好的查詢?

SELECT * FROM tableA WHERE variable1 = $var1 

...然後我需要使用「準備」,像這樣:

$my_query = $wpdb->get_results($wpdb->prepare("SELECT * FROM tableA 
WHERE variable1 = %s", $var1)); 

然而,當我想要做這種類型的查詢,而不是:

  • 連接兩個表的列
  • 並沒有使用可變

這樣的:

SELECT * FROM tableA, tableB WHERE tableA.some_col = tableB.some_other_col 

... '應該' 我:

  1. 仍然使用某種形式的 '準備' 語句,以防止SQL注入
  2. 或者是它可以做到以下幾點:

    $my_query = $wpdb->get_results("SELECT * FROM tableA, tableB WHERE 
    tableB.some_col = tableB.some_other_col"); 
    
+2

如果你沒有任何參數傳遞,則不需要使用準備好的語句,因爲沒有機會,用戶輸入將觸動您的數據庫的討論。 – WillardSolutions

+1

這不僅僅是一個安全問題,而是一個代碼風格問題。正如下面的答案所指出的那樣,你不需要它,但是*可能會有一些代碼風格的優點來持續使用它。就我個人而言,當我傳入參數時,我只使用'$ wpdb-> prepare()',但這是一個代碼風格決定。 –

回答

1

您不需要準備語句,因爲任何人都無法使用此代碼進行sql注入。

如果你只是選擇了從兩個表不給你,可準備的語句忘記任何變量:)

1

我想你應該堅持

$ wpdb->準備

即使您沒有任何未清理的參數傳遞給查詢。 有幾個原因你應該這樣做:

  1. 這是一個最佳實踐;
  2. 一致性。如果您將對所有查詢使用相同的方法;
  3. 如果您將來需要將參數傳遞給此查詢,它對您來說會更容易。

你會找到一個關於這個在這裏Should I use wpdb prepare?

+0

您正在複製somone其他人的斷言,認爲這是最佳做法。如果你真的可以支持最好的做法 - WP是否會推薦它?你是否看到來自某個權威來源的推薦?或者只是SE的另一個答案? –

+0

@cale_b這不是WP最佳實踐,而是查詢數據庫時使用參數化查詢的常用最佳做法[如何保護SQL中的SQL注入](https://msdn.microsoft.com/zh-cn/ /library/ff648339.aspx)和[w3schools.com關於SQL注入](http://www.w3schools.com/sql/sql_injection.asp)。我真的相信任何人都應該使用參數化查詢,並且不僅適用於WP。 –

相關問題