現在、複数検索窓を設置してSQLへ接続後データベースより検索結果(情報)を表示させるという仕組みを作っています。色々とアドバイスをいただき「or検索」でというところまでは辿りついたのですが、結果が思うように表示されないのとなぜかSQL文がそのまま画面に表示されます。
例)検索窓に1箇所には「1234567」もう1箇所には「8901234」を入力して検索ボタンをクリックすると、データベースから「1234567」と「8901234」の情報を抽出し表示。
###画面に表示されるSELECT文###(現在のエラー部分)
SELECT partsnumber,description,unitprice,stockqty FROM parts_price WHERE 1 and partsnumber in(?,?)
Array ( [0] => 1234567 [1] => 8901234 ) 結果
該当のソースコード###
serch.html
<input class="text" type="text" name="pnk[]"><br> <input class="text" type="text" name="pnk[]"><br> <input type="submit" class="subbtn" value="Search">
view.php
<?php try{ $pnk=filter_input(INPUT_POST,"pnk",FILTER_DEFAULT,["options"=>["default"=>[]],"flags"=>FILTER_REQUIRE_ARRAY]); $pnk=array_filter(array_unique($pnk),function($x){ return $x!==""; }); //SQL接続 $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $sql="SELECT partsnumber,description,unitprice,stockqty FROM parts_price WHERE 1 "; $data=[]; if(count($pnk)>0){ $sql.="and partsnumber in("; $sql.=implode(array_fill(0,count($pnk),"?"),","); $sql.=")"; $data=array_merge($data,$pnk); } print $sql."<br>"; print_r($data); $stmt = $dbh->prepare($sql); $stmt->execute($data); $rows=$stmt->fetchAll(); $partsnumber = $row['partsnumber']; $description = $row['description']; $unitprice = $row['unitprice']; $stockqty = $row['stockqty']; } catch(PDOException $e) { die($e->getMessage()); } ?> //下記のテーブルの中にデータベースの検索結果を表示させたいのです。今は何も表示されていません。 結果<br/> <table width="60%" align="center" border="1"> <table width="750" border="0"> <tr> <th scope="col">Parts Number</th> <th scope="col">Description</th> <th scope="col">Unit Price</th> </tr> <td><?php print $partsnumber;?></td> <td><?php print $description;?></td> <td align="right"><?php print number_format($unitprice)?></td> </table> <br/><input type="button" class="subbtn" onClick="history.back()" value="Back">
上記のコードの中で不具合となる原因がどこにあるのか見当がつきません。どなたかご教示いただけると助かります。
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー