2011-12-27 87 views
3

我讀過一本關於PHP & MySQL的書。 準備語句使用二進制協議,但mysqli缺乏此功能。 另外我讀了準備好的語句可以被緩存(他們的執行計劃)並且比mysqli_query更快,當然更安全? 什麼時候應該使用預準備語句,何時使用mysqli_query?準備好的語句和mysqli_query之間有什麼區別?

編輯
讓我們asume我有以下查詢:

echo "<table>"; 
echo "<tr class ='tablehead'><td>Name</td><td>Location</td><td>Review</td><td>Image</td> <td>Thumb</td></tr>"; 
while ($row = mysql_fetch_array($query)) 
{  
    echo "<tr>"; 
    echo "<td>" . $row['user_fname'] . "</td>"; 
    echo "<td>" . $row['user_location'] . "</td>"; 
    echo "<td>" . $row['user_review'] . "</td>"; 
    echo "<td>" . $row['user_image'] . "</td>"; 
    echo "<td>" . $row['user_thumb'] . "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 

哪種方法是這裏最好的?

回答

4

準備好的語句具有一些優點,其中一個重要的特點是對SQL注入漏洞更簡單。我認爲這是他們最大的優勢。關於性能,我們必須考慮SQL解析,查詢計劃創建和結果獲取階段與查詢執行成本之間的成本:如果後者的I/O占主導地位(通常是這樣),那麼您從準備階段或mysqli中獲益甚微。

對於簡單的重複查詢 - 經常在Web應用程序的簡單的一部分使用 - MySQL的查詢緩存適用於查詢與完全相同的,完整的SQL文本,由此製得的查詢不會使用它。根據我的經驗,這可能不會否定任何準備好的查詢的性能優勢。

+0

那麼使用它們的組合是否更好? – ALH 2011-12-27 13:59:58

+0

原則上,每一個查詢都需要根據此分析進行分析和處理。當然,在開發可維護的應用程序時,這遠遠不實用。所以基本上我建議分析鳥的應用程序視圖,然後決定實現模式。 – 2011-12-27 14:53:47

+0

什麼是更加萬無一失的意思?這是否意味着即使Prepared語句正確寫入,SQL注入仍然是可能的? – krikara 2013-10-28 03:06:09

相關問題