htmlからデータを受け取って
$part = htmlspecialchars($_POST['part']);
$pdo = new PDO("mysql:dbname=product", "root");
$st = $pdo->prepare("SELECT * FROM riso_parts WHERE part = ?");
$st->execute(array($part));
で正しく検索し表示出来ていて、ワイルドカードでの検索をさせたいのですが、LIKEを使用するのはわかるのですが、上記の場合にはどのように使用すれば良いかが判りません。
$st = $pdo->prepare("SELECT * FROM riso_parts WHERE part LIKE %?%");
では無理でした。
どなたか、ご教示をお願い致します。
bind する方の文字に % を含めると良いようです。
https://stackoverflow.com/questions/583336/how-do-i-create-a-pdo-parameterized-query-with-a-like-statement
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); $query->execute(array('value%'));
ただ、これだと、質問のコードでの $part に % が含まれてると、ちょっと期待通りにはならないので、更にひと手間加える必要があるようです。
https://qiita.com/ritukiii/items/ccb81128757fda8bdb3c
$sql = 'select * from books where title like ?'; $stmt = $dbh->prepare($sql); $stmt->execute(array(sprintf('%%%s%%', addcslashes($title, '\_%')));
試してませんが
$st = $pdo->prepare("SELECT * FROM riso_parts WHERE part LIKE CONCAT('%',?,'%')");
とかですかね。
パターンマッチ用の文字列を正しく作れば良いので
$st = $pdo->prepare("SELECT * FROM riso_parts WHERE part LIKE ?");
$st->execute("%".array($part)."%");
のほうがよいかな
最初のは、アスタリスク無しならヒットするのですが、無しだとヒットしないですね。
2番目のは、
Notice: Array to string conversion in C:\xampp\htdocs\aaa.php on line 14
Warning: PDOStatement::execute() expects parameter 1 to be array, string given in C:\xampp\htdocs\aaa.php on line 14
と、
$st->execute("%".array($part)."%");
でのエラーが表示されます。
bind する方の文字に % を含めると良いようです。
https://stackoverflow.com/questions/583336/how-do-i-create-a-pdo-parameterized-query-with-a-like-statement
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); $query->execute(array('value%'));
ただ、これだと、質問のコードでの $part に % が含まれてると、ちょっと期待通りにはならないので、更にひと手間加える必要があるようです。
https://qiita.com/ritukiii/items/ccb81128757fda8bdb3c
$sql = 'select * from books where title like ?'; $stmt = $dbh->prepare($sql); $stmt->execute(array(sprintf('%%%s%%', addcslashes($title, '\_%')));
そのアスタリスクって、test-0123 とかをひっかけるためのワイルドカードのつもりで入れてます?
であれば、アスタリスクは無しで。
SQL では、ワイルドカード的なのは % と _ です。
MS-Access は、* と ? ですが。
え?
なんと!
大変お粗末なオチでしたwww
ありがとうございました。
そのアスタリスクって、test-0123 とかをひっかけるためのワイルドカードのつもりで入れてます?
2017/10/11 13:18:25であれば、アスタリスクは無しで。
SQL では、ワイルドカード的なのは % と _ です。
MS-Access は、* と ? ですが。
え?
2017/10/11 14:08:48なんと!
大変お粗末なオチでしたwww
ありがとうございました。