2016-05-23 104 views
1

我編碼了這兩個代碼塊,但他們似乎也是這樣做的。我不明白你什麼時候應該使用其中的每一個。這兩個代碼有什麼區別

$query= $db->query("SELECT * FROM forum_table WHERE forum_id = '$id'"); 

$sql="SELECT * FROM forum_table WHERE forum_id = '$id'"; 
if ($query = $db->prepare($sql)) 
$query->execute(); 

我不明白如何將這些不同

+6

其中一種說法是拼命試圖成爲準備好的榮耀的燈塔,但在最後的障礙失敗了:( – Dale

+0

第一個是真正有用的,當你只有一條備用線 –

回答

-1

一開始這兩個聲明的是完全一樣的所以從字面上沒有什麼區別。

有一個提示與第二個塊非常不同的事情。

prepared statements

至於何時使用了另一種..總是用準備好的發言

0

好,在

$query= $db->query("SELECT * FROM forum_table WHERE forum_id = '$id'"); 

情況下,這是非常簡單,大家都知道,簡單一個直接執行的查詢,沒有額外的魔法。

$sql="SELECT * FROM forum_table WHERE forum_id = '$id'"; 
if ($query = $db->prepare($sql)) 
$query->execute(); 

雖然在第二件的代碼,你已經使用了相同的查詢,但你必須在執行(你不是在做正確的方式前準備查詢,那是你不會離開的佔位符參數綁定它是使用預準備語句的推薦和有意義的方式), 通過在預準備語句中爲綁定參數創建佔位符,稍後準備在實際執行查詢之前準備一個模板,這在許多方面都有所幫助。 準備語句減少了解析時間,因爲查詢的準備工作只進行一次(儘管該語句多次執行)。 注意:最好的做法是將參數綁定到準備語句中,以便如果查詢必須運行多個不同參數的時間。僅限 綁定參數使服務器的帶寬最小,因爲您每次只需發送參數;不是整個查詢。 最後但並非最不重要的是,如果參數綁定到SQL注入,Prepared語句對於SQL注入非常有用。

+0

_準備語句是非常有用的反對SQL injection._但不是查詢你不用在哪裏不要查詢你在哪裏不要使用參數化的查詢!!!! – RiggsFolly

+0

是的,你是對的我在那裏寫了使用Prepared語句的參數化查詢,否則在第二個代碼示例中prepare語句還沒有製作模板對於當時的查詢(這是沒有價值沒有參數),但仍邏輯上說,查詢已準備在那裏,如果任何人想通過執行「執行」以後執行查詢 (這是什麼prepare()做或沒有綁定參數。) –