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)."%");
のほうがよいかな