現在2つの条件でMYSQLからデータを引っ張ってきたいのですが
下記のコードではnameだけのデータでしか検索・表示しかできておりません。
SQLを見てみますと
SELECT * FROM p1 WHERE 1=1 AND card_name LIKE :name
PHP
1//p_no と nameを 前のページからformを使用 2$p_no = filter_input(INPUT_GET, 'p_no'); 3$name = filter_input(INPUT_GET, 'name'); 4 5if (is_string($name)) { 6 //MySQLデータベースは省略 7 try { 8 $pdo = new PDO($dsn, $user, $password); 9 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 10 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 11 // SQL文を作る 12 $sql = 'SELECT * FROM p1 WHERE 1=1'; 13 //検索条件 14 if($p_no) $sql .= ' AND pp_no = :p_no'; 15 //名前の検索条件(あいまい検索) 16 if($name) $sql .= ' AND card_name LIKE :name'; 17 $sth = $pdo -> prepare($sql); 18 //プリペアドステートメントを実行する(インジェクション対策) 19 if($area) $sth -> bindValue(':p_no', $p_no, PDO::PARAM_STR); 20 if($name) $sth -> bindValue(':name', '%'.$name.'%', PDO::PARAM_STR); 21 // $sth -> execute($sql); 22 $sth -> execute(); 23 $result = $sth->fetchAll(PDO::FETCH_ASSOC); 24 25 echo $sql; 26 27 if(count($result)>0){ 28 echo "名前に「{$name}」が含まれているレコード"; 29 // テーブルは省略 30 31 } else { 32 echo "名前に「{$name}」は見つかりませんでした。"; 33 } 34 } catch (Exception $e) { 35 echo '<span class="error">エラーがありました。</span><br>'; 36 echo $e->getMessage(); 37 } 38}
原因は
$sth -> execute();
となっているのはわかるのですが、
$sth -> execute($sql); としますと、(サンプルコードはexecute($sql)となっています)
エラー表示
Warning: PDOStatement::execute() expects parameter 1 to be array, string given in
となります。
参考にさせていただいたサンプルコードがあり、
それを自身の変数に変えるぐらいの知識しか無いため、
executeは引数に配列を期待しているがstringを渡しているための警告です。
という事がわかってもサンプルコードでは動いているはずなので、
どのPODをどのように変更してよいのかわかりません。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー