2010-02-25 64 views
4

我是PDO的新手,不得不說我目前爲止喜歡它,但在使用它的某些調用方面我仍然有些不穩定,並且文檔也不完整。關於PDO和bindparam的澄清

我正在使用一對存儲過程,並且從我對PDO的理解中,我被迫爲此使用了準備。我構建了一個模塊,可以存儲有關用戶造成的任何錯誤的信息。我知道bindParam會在任何引號轉義並清除字符串之前將其插入到數據庫中,這不是我想要的。我想查看字符串,因爲用戶輸入該字符串以進行故障排除。我曾嘗試放棄bindparam調用,但是嘗試通過引用傳遞錯誤。有沒有一種方法可以實現這一目標?也開放給建議。謝謝。

回答

6

bindParam不會「逃脫」或「清潔」任何東西。它直接將您提供的字符串直接發送到數據庫層。包含在字符串中的任何'字符將最終以數據庫中列中的'字符結尾。這就是參數化的要點:沒有「特殊字符」需要擔心。

如果您在通過未提及bindParam時遇到問題,我建議您改用bindValue。實際上,我幾乎建議始終使用該呼叫,因爲bindParam(和mysqli_stmt_bind_param)的參照行爲很混亂,幾乎總是不需要的。

+0

謝謝!我將使用bindValue來代替。我有點困惑......我有一種強烈的印象,當我從mysql_函數切換到PDO時,我不再需要mysql_real_escape_string。請告訴我,不管怎樣,PDO正在爲我處理這個問題,因爲我已經閱讀了至少其他六個地方。 – jim 2010-02-25 02:19:17

+0

@jim:如果一個答案解決了你的問題,請確保點擊旁邊的複選標記,以便發佈者獲得積分:) – Matchu 2010-02-25 02:39:53

+4

是的,你不需要帶有PDO的'mysql_real_escape_string'。字符串值直接進入數據庫層,而不必將其粗略拼接到SQL語句中。因爲它不是在SQL字符串文字中構造的,所以不需要轉義任何東西。 – bobince 2010-02-25 09:44:37