2011-11-28 98 views
0

如何在使用PDO時無法使mysql_real_escape_string正常工作?我一直在使用在調用mysql_real_escape_string()時出現「拒絕訪問」錯誤的故障

try { 
    include "connect_to_db.php"; 

    $sql = sprintf("NULL, '%s'", 
     mysql_real_escape_string('Woot') 
    ); 
    $count = $dbh->exec($sql); 
    $dbh = null; 
    } 
catch(PDOException $e){ 
    echo $e->getMessage(); 
} 

錯誤總是指向行,其中mysql_real_escape_string是

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\pathhere\file.php on line 44 

我甚至使用root用戶現在進行測試,但它仍然無法工作時收到錯誤。

+0

可能的重複:http://stackoverflow.com/questions/6384423/mysql-real-escape-string-doesnt-work –

+0

如果您可以在這裏插入錯誤消息/代碼,這將是更容易建議的解決方案。 – farzad

回答

3

大部分mysql_ *函數都使用mysql連接資源。作爲函數的documentation提到,它實際上需要一個mysql_connect()資源,因爲您使用的是PDO,所以在您的代碼中不可用。

但是,如果您想確保您的SQL安全,則解決方案不使用此函數。您可以在SQL查詢中使用參數create a prepared statement,然後執行它。該解決方案使用PDO方式運行查詢,並且同樣安全。

更新:

如果你只是需要一個字符串使用PDO進行轉義爲SQL,您可以使用quote() method of the PDO object。然而,這不是一個常見的任務。大多數情況下,當您希望爲SQL查詢轉義字符串時,您實際上想要運行查詢。如果文檔本身就是這種情況,那麼最好使用prepare() method of the PDO object。您可以閱讀PDO prepared statements documentation的示例部分以獲取更多信息。

+0

所以這就是爲什麼。對PDO的更改會導致mysql_real_escape_string過時。 mysql_real_escape_string還有其他類似的PDO替代方法嗎? – enchance

+0

@enchance:只是在評論中更新瞭解釋您的問題的答案。 – farzad

相關問題