2014-02-07 60 views
1

以下準備陳述之間有什麼主要區別?爲什麼更喜歡哪一個?mysql準備了哪些陳述我應該使用

1:

$stmt = $db->prepare("INSERT INTO users(userName) VALUES (:user)"); 
$user = "Steve"; 
$stmt->bindParam(':user', $user); 
$stmt->execute(); 

2:

$stmt2 = $db->prepare('INSERT into users(userName) VALUES(:user)'); 
$stmt2->execute(array(':user'=>'Steve')); 
+2

唯一的區別是'bindParam'可以綁定「輸出參數」,如果您正在使用返回值的存儲過程。 Docs:http://www.php.net/manual/en/pdostatement.bindparam.php –

+0

從1到2的不同之處在於,1允許指定任何用戶($ user),如果該代碼在函數中的某處版本2是硬編碼的。我個人更喜歡1,因爲我來自冗長的編碼風格陣營 - 但簡潔的編碼也可以,只要它的可讀性和評論。 – robnick

回答

4

bindParam採用可變參數作爲參考。這意味着變量值MIGHT可能會被修改,具體取決於你做了什麼(例如調用一個存儲過程來改變傳遞給它的變量的值)。

這就是爲什麼你應該使用bindValue來代替,除非你希望MySQL改變你的變量的值。

只有實際的主要區別是,如果您使用第二種方案,則不能指定變量類型。每個參數都被視爲一個字符串,而在使用bindParam/bindValue時,您可以自由定義該參數是字符串還是整數。

那麼你應該使用什麼呢?那麼,沒有錯。如果在插入大量字符串數據時發現使用第二種方法更容易,那麼它沒有任何問題。