前提・実現したいこと
初心者ですが、よろしくお願いいたします。
現在、wordpressにてmysqlに接続する検索機能を作成しております。
以下のようなデータベースにて検索を行い、関連するコンテンツを表示させたいと思いますが、うまくいきません。
該当のソースコード
データベース①
id | name | category |
---|---|---|
1 | name1 | 1,2 |
2 | name2 | 2,3 |
3 | name3 | 1,3 |
データベース②
id | category | contents |
---|---|---|
1 | 1 | aaa |
2 | 2 | bbb |
3 | 3 | ccc |
php
1global $wpdb; 2$select = isset($_POST['name']) ? $_POST['name'] : ""; 3 4if ($select) { 5 $sql =$wpdb->prepare( 6 "SELECT * FROM データベース① WHERE name = %s",($select) 7 ); 8 $id_rows = $wpdb->get_results($sql); 9} 10 11if($id_rows){ 12 foreach ((array)$id_rows as $id_row){ 13 $category = $wpdb->prepare( 14 "SELECT * FROM データベース② WHERE category in %d ",($id_row->category) 15 ); 16 $contents = $wpdb->get_results($category); 17 } 18} 19if($contents):?>//検索結果をテーブルに表示 20 <tr> 21 <td><?=($contents->contents)?> 22 </td> 23 </tr> 24<?php endif; ?>
上記にて、仮にname1を検索した場合、テーブル上に「aaa」と「bbb」が表示されるようにしたいと考えております。
発生している問題・エラーメッセージ
php
1You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' at line 1] 2SELECT * FROM データベース② WHERE category in 1
試したこと
「%d」の箇所をin句の配列の数だけ「?」とする必要があるようですが、wpdbにおける書き方が調べてもわかりませんでした(上記データベースでは2つとしていますが、値の数が場合によって増減する予定)。また、そもそもデータベース内にカンマ区切りで入力したデータをin句で取得できるか否かも理解できていません。
勉強不足につき、一部コードが意味不明となっているかもしれませんが、ご指摘頂ければ幸いです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/03 07:50
2018/02/03 08:00
2018/02/03 08:34