前提・実現したいこと
PHPでmysqlを使用するためにsql文とsql文に代入するデータを引数として渡すと処理して成功したかどうかとsqlの結果を返すデータベース関数を作成しました。
これを使用していたんですが1行のみの結果を取得する時は正常に動いていたと思うのですが、複数行を所得使用とした際に1行のみしか取得できないという状態になりました。
試しにmysql側で直接sql文を実行した結果、正しく複数行取得されていたのでsql文に間違えがあるとかではないと思います。
発生している問題・エラーメッセージ
エラーメッセージは発生していません データベースから複数行の取得を行いたいのですが1行しか所得できません
該当のソースコード
php
1$sql = "SELECT id FROM tbl WHERE name_0=? AND name_1=? AND name_2=? AND name_3=? AND name_4=?"; 2$data = [$name[0],$name[1],$name[2],$name[3],$name[4]]; 3$wk = db($sql,$data); 4$result = $wk[0]; 5$data = $wk[1]; 6 7function db($sql,$data){ 8 $dsn = 'mysql:dbname=testdb;host=localhost;charset=utf8mb4;'; 9 $user = 'testuser'; 10 $password = 'pass'; 11 try{ 12 $dbh = new PDO($dsn, $user, $password); 13 14 $stmt = $dbh->prepare($sql); 15 $result = $stmt->execute($data); 16 $row = []; 17 if(isset($stmt)){ 18 foreach($stmt as $row){} 19 } 20 return [$result,$row]; 21 }catch (PDOException $e){ 22 print('Error:'.$e->getMessage()); 23 die(); 24 } 25 $dbh = null; 26}
PHP,MYSQL
試したこと
returnされた後の$resultと$rowをvar_dump()した結果、$result=true、$rowは1行の取得が行われていました。
補足情報(FW/ツールのバージョンなど)
mysql:5.7.x
php:7.2.17
データベース構造です
mysql
1CREATE TABLE `tbl` ( 2 `id` INT(9) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT , 3 `name_0` VARCHAR(20) NOT NULL , 4 `name_1` VARCHAR(20) NOT NULL , 5 `name_2` VARCHAR(20) NOT NULL , 6 `name_3` VARCHAR(20) NOT NULL , 7 `name_4` VARCHAR(20) NOT NULL , 8 `name_x_0` VARCHAR(20) NOT NULL , 9 `name_x_1` VARCHAR(20) NOT NULL , 10 `name_x_2` VARCHAR(20) NOT NULL , 11 `name_x_3` VARCHAR(20) NOT NULL , 12 `name_x_4` VARCHAR(20) NOT NULL , 13 `num` INT(10) NOT NULL , 14 `num_e` INT(10) NOT NULL , 15 `user_id` INT(9) UNSIGNED ZEROFILL NOT NULL , 16 `date` TIMESTAMP NOT NULL , 17 PRIMARY KEY (`id`) 18) ENGINE = InnoDB;
複数行を取得しようとしているsql文です
SELECT id FROM tbl WHERE name_0=? AND name_1=? AND name_2=? AND name_3=? AND name_4=?
回答3件
あなたの回答
tips
プレビュー