【環境】PHP7.3.2×IIS×SQLServer2014
【知識】PHP少し触ったことある程度で、fetchやfetchallについて理解ができていない状態で以下のソースも理解できていないままコピペしている箇所があることをご了承ください
当方プロシージャーについては無知で、同僚が作ったプロシージャー(SQLServerのプロシージャーで結果が複数行ある)の結果をPHP内でテーブル形式で表示させたく、テーブル形式にする前のプロシージャー結果を配列で取得するところで行き詰っております。
PDO接続でSQLSERVERに接続し、接続はうまくいっておりますが、fetchを使いだすと急に値が取得できなくなります。
仮にid(社員番号)を引数として渡し、名前と住所が返ってくるプロシージャーとします。
PHP
1$host = 'TEST'; 2$dbname = 'TEST'; 3$user = 'TEST'; 4$pass = 'TEST'; 5 6// PDOでDB接続 7$dbh = new PDO("sqlsrv:server=$host; database=$dbname;", $user, $pass); 8$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // エラー時に例外を吐かせる 9$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC); // 連想配列でfetchする 10// ステートメント準備 11$sth = $dbh->prepare("{ CALL procedure(?) }"); 12$id= "100"; 13 14$sth->bindParam(1, $id, PDO::PARAM_STR); 15$sth->bindParam(2, $name, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 20); 16$sth->bindParam(3, $address, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 200); 17 18$sth->execute(); 19 20$result = $sth->fetchall(PDO::FETCH_ASSOC); 21var_dump($result);
結果は、array(0) { }となり結果が返りませんが、$result = $sth->fetchall(PDO::FETCH_ASSOC);
var_dump($result);を削除し、echo($name);とすると結果は返ってきます。
当方素人なのに加え、業務で使用している実際の話ではなく仮の話に置き換えて記載したので、矛盾やおかしなところがあるかもしれませんが、不明点あれば追記しますので、どなたかご対応いただけると幸いです。
あなたの回答
tips
プレビュー