(つまり、エラーが程度だったものだ)あなたは準備文の(同じ名前の)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インジェクションの問題があります。
Thx ajreal、なぜ私のやり方はまだ注射に敏感ですか? – bart
あなたはフルSQLにすべてを含めたので、例のように、検索する正確な値をバインドする必要があります。 – ajreal
@ajreal:ちょっとしたことです。 ''と '' first_name ... "の間のドット(ドット)間のドット(ドット)。 – Helmut