2010-12-05 96 views
0
  1. 我需要在我的INSERT和SELECT FROM語句中使用真正的轉義嗎?
  2. 爲什麼我在下面的例子中使用的語法不起作用(這只是我嘗試過的很多方法之一)?mysql_real_escape_string()不會轉義任何東西

    //insert user input for word 1 
    $sql = "INSERT INTO test (Word1, Word2, Word3, Word4, Word5) 
    VALUES('$Word1','$Word2','$Word3','$Word4','$Word5')", 
    mysql_real_escape_string($Word1), 
    mysql_real_escape_string($Word2), 
    mysql_real_escape_string($Word3), 
    mysql_real_escape_string($Word4), 
    mysql_real_escape_string($Word5); 
    if(!mysql_query($sql,$con)) 
    { 
        die('Error: ' . mysql_error()); 
    } 
    

回答

1

我強烈建議您不要完全逃脫,並直接移動到prepared statementsmysqli::prepare,也許通過PDO。它最終更簡單和更安全:

$dsn = 'mysql:dbname=test;host=127.0.0.1'; 
$user = 'dbuser'; 
$password = 'dbpass'; 

$dbh = new PDO($dsn, $user, $password); 

$sql = 
    'INSERT INTO mytable ' . 
    '(Word1, Word2, Word3, Word4, Word5)' . 
    'VALUES(?, ?, ?, ?, ?)'; 

$stmt = $dbh->prepare($sql); 

$words = array('word1', 'word2', 'word3', 'word4', 'word5'); 
$stmt->execute($words); 

$words = array('word6', 'word7', 'word8', 'word9', 'word10'); 
$stmt->execute($words); 
4

看起來你要使用sprintf(),這麼正常,你需要重新格式化你的代碼稍微做:

$sql = sprintf("INSERT INTO test (Word1, Word2, Word3, Word4, Word5) 
VALUES('%s','%s','%s','%s','%s')", 
mysql_real_escape_string($Word1), 
mysql_real_escape_string($Word2), 
mysql_real_escape_string($Word3), 
mysql_real_escape_string($Word4), 
mysql_real_escape_string($Word5) 
); 
+0

%s的意義是什麼? – Bodhidarma 2010-12-05 04:38:09