2011-01-17 11 views

答えて

8

(つまり、エラーが程度だったものだ)あなたは準備文の(同じ名前の)2つのパラメータを述べ、まだあなただけの最初のパラメータの値を指定します。

PDOがどのように内部的に同じパラメータ名の問題を解決したかはわかりませんが、いつでもそれを避けることができます。

2つの解決策:ところで

$sql = "select * from $table ". 
     "where " 
     "first_name like concat('%', :fname, '%') or ". 
     "last_name like concat('%', :lname, '%')"; 
$stmt= $DBH->prepare($sql); 
$stmt->bindValue(':fname', $string, PDO::PARAM_STR); 
$stmt->bindValue(':lname', $string, PDO::PARAM_STR); 

$sql = "select * from $table ". 
     "where " 
     "first_name like concat('%', ?, '%') or ". 
     "last_name like concat('%', ?, '%')"; 
$stmt= $DBH->prepare($sql); 
$stmt->bindValue(1, $string, PDO::PARAM_STR); 
$stmt->bindValue(2, $string, PDO::PARAM_STR); 

、あなたが行っている既存の方法は、まだSQLインジェクションの問題があります。

+0

Thx ajreal、なぜ私のやり方はまだ注射に敏感ですか? – bart

+0

あなたはフルSQLにすべてを含めたので、例のように、検索する正確な値をバインドする必要があります。 – ajreal

+0

@ajreal:ちょっとしたことです。 ''と '' first_name ... "の間のドット(ドット)間のドット(ドット)。 – Helmut

関連する問題