2015-06-18 42 views
0

這是更快於:這是更快的mysqli_prepare或mysqli_query?

1.

$name = $sql->real_escape_string($_POST['name']); 
$age = $sql->real_escape_string($_POST['age']); 
$email = $sql->real_escape_string($_POST['email']); 

$query = "INSERT INTO `tablename` VALUES ('$name','$age','$email');"; 

$sql->query($query) or die($query.'<br />'.$sql->error); 

2.

$name = $_POST['name']; 
    $age = $_POST['age']; 
    $email = $_POST['email']; 

    $query = $sql->prepare("INSERT INTO `tablename` VALUES ('?','?','?');"); 

    $query->bind_param("sis",$name,$age,$email); 
    $query->execute(); 

使用準備和要發送到MySQL數據庫更請求,這將需要更多的時間綁定PARAM時,因爲有更多的請求,每個請求都有它的連接時間。

如果mysql數據庫不在本地主機服務器中,則爲true。

這句話是否正確? 謝謝

+0

不完全正確的,沒有....和mysqli接口是足夠聰明,只發送綁定PARAM值到數據庫服務器一次,在exeute就我所知...而言,性能(即使是遠程數據庫服務器)的性能差異達到納秒級不應被認爲比正確保護代碼更重要.....尤其是可以使用相同的預準備語句反覆使用不同的綁定值,這使得在這種情況下更快 –

+0

並且您應該已經連接到數據庫,所以'prepare()'/'bind()'/'execute()' (或確實在'query()') –

+0

@MarkBake r謝謝你的迴應,是的,這是沒有更多的連接。但準備語句將發送請求到數據庫,我指的是這個請求時間。 – david

回答

0

在sql中使用預準備語句的實際目的是爲了降低處理查詢的成本;不要從查詢中分離數據。這就是它現在如何使用w/php,而不是它是如何設計用於首位的。通過使用SQL,您可以降低使用預準備語句執行多個類似查詢的成本。這樣做會削減解析,驗證,並且通常會爲所述查詢預先生成執行計劃。這就是爲什麼他們在循環中運行得更快,而不是他們的IMMEDIATE查詢表兄弟。不要認爲只是因爲某人使用php,這種功能並不意味着這是它的方式,或者只有這樣做。儘管它比一般查詢更安全,但它們在做什麼或更確切地說可以做什麼方面也更加有限。

我想下面參考鏈接將是對你有用: http://code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059

+0

謝謝你的回答,但是你提到的情況是很少見,通常如果我執行一個查詢。我不會再執行它。 – david

相關問題