2010-12-05 9 views
0
  1. 私はINSERT文とSELECT FROM文の両方で本当のエスケープを使用する必要がありますか?
  2. 私が次の例で使用している構文が機能していないのはなぜですか(これは私が試した多くの方法の1つです)。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

、およびにmysqli::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

+0

これはphpフォーマット文字列のデータ型指定子です。php.net/sprintfに行くと、使用可能なさまざまな型指定子が詳細に表示されます – Patrick

関連する問題