ええと、私はこれに数時間取り組んできましたが、私の人生では、何が悪いのかわかりません。コードは次のとおりです。
$str = "%" . $_POST['str'] . "%";
$offset = (int) $_POST['offset'];
try {
$stmt = $dbh->prepare("SELECT * FROM Spells WHERE :col LIKE :str ORDER BY :sort LIMIT 10 OFFSET :offset");
$stmt->bindParam(":col",$_POST['col']);
$stmt->bindParam(":str",$str);
$stmt->bindParam(":offset",$offset, PDO::PARAM_INT);
$stmt->bindParam(":sort",$_POST['sort']);
$stmt->execute();
}
catch (PDOException $e) {
echo "MySQL error: " . $e->getMessage() . "<br/>";
die();
}
データベースへの接続は正常に機能し、エラーは発生しません。%
検索フィールドに入力すると(クエリのように出力され%%%
ます)、期待どおりに結果が返されます。
phpMyAdmin で同じクエリを試みましたが、問題なく動作します。以前は正常に機能していた非推奨の関数からこのスクリプトを更新していますmysql_*
。
以前の非推奨のクエリの例:
$sql = "SELECT * FROM Spells WHERE " . $col . " LIKE '%" . $str . "%' ORDER BY " . $sort . " LIMIT 10 OFFSET " . $offset;
すでに述べたように、私はこのサイトでも検索を行っており、解決策を見つけようとしています。MySQL でさえ、何も機能していませんCONCAT('%',:str,'%')
。
これをテストしているサーバーは、php バージョン 5.3.17 で実行されています。
私の質問は、私が明確にしなかった場合に備えて、ここで何が間違っているのですか? 疑問に思っている人のために (これを入れたと思っていたのに、どうやら入れていなかったようです)、エラーメッセージはありません。