前提・実現したいこと
PHPでDBの更新処理を行おうとしています。
発生している問題・エラーメッセージ
try-catchしたところこのようなメッセージが出力されました。 SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute SQL送信後のDBでの更新処理が行われていません。 $stmt_modify0と$stmt_modify1の2つで更新処理が行われませんでした。 汚いコードであることは重々承知していますが、 どこに問題があるのか分からないので助けて頂けると幸いです。
該当のソースコード
PHP(ソースコード)
1<?php 2session_start(); 3if (empty($_SESSION['username'])) { 4 header("Location:./Login.php"); 5} 6// 入力フォームから文字または音声データが入力された後の処理 7if (isset($_POST['chars'])) : 8 $pdo = new PDO('mysql:host=localhost;dbname=samurai;charset=utf8', 'Toshiaki', 'ume1027'); 9 $sql_modify0 = 'update flowsheet_local set char_info=? WHERE m_id=? AND no=?'; 10 $sql_modify1 = 'update flowsheet_local set audio=? WHERE m_id=? AND no=?'; 11 12 $stmt_modify0 = $pdo->prepare($sql_modify0); 13 $stmt_modify1 = $pdo->prepare($sql_modify1); 14 // DBを更新するSQL 15 $i = 1; 16 foreach ($_POST['chars'] as $chars) : 17 if (empty($chars)) : $i++; 18 continue; 19 else : 20 $stmt_modify0->execute(array($chars, $_SESSION['m_id'], $i)); 21 $i++; 22 endif; 23 endforeach; 24 $i = 1; 25 foreach ($fileName as $audio) : 26 if (empty($audio)) : $i++; 27 continue; 28 else : 29 $stmt_modify1->execute(array($audio, $_SESSION['m_id'], $i)); 30 $i++; 31 endif; 32 endforeach; 33 // header('Location:./flowsheet.php'); 34 endif; 35endif; 36?>
PHP(出力)
1//CREATE TABLEを行う 2CREATE TABLE flowsheet_local (id INT, m_id INT,no INT,char_info VARCHAR,audio VARCHAR) 3//debugDumpParamsで出力されたSQL 4update flowsheet_local set char_info='q' WHERE m_id='28' AND no='1'; 5update flowsheet_local set audio='900ab15ef05f5664647e837d9dd45c63.mp3' WHERE m_id='28' AND no='1'
試したこと
既にdebugDumpParamsを用いて送信されているSQLが正しいことは確認済みで,ブラウザに表示されたSQLをphpmyadminで実行してみると全て正常に更新処理が行われました。
補足情報(FW/ツールのバージョンなど)
PHPはバージョン7.4.5です。XAMMPを使用しています。
回答2件
あなたの回答
tips
プレビュー