質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1226閲覧

SQL update文でDBが更新されません

EbiTT

総合スコア12

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/11/19 05:22

編集2020/11/19 06:09

前提・実現したいこと

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を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2020/11/19 05:29

> 既にdebugDumpParamsを用いて送信されているSQLが正しいことは確認済み その内容とCREATE TABLEを質問に追記しては?
m.ts10806

2020/11/19 06:01

コードと出力はコードブロックわけてください。 このままコピペでPHP実行自体できません。
m.ts10806

2020/11/19 06:02

あと、try-catchでException捕捉して確認してください。
EbiTT

2020/11/19 06:10

コメントを頂きありがとうございます。追記・編集しましたので不足があれば教えて頂けると助かります。
sazi

2020/11/19 06:29

> ブラウザに表示されたSQLをphpmyadminで実行してみると全て正常に更新処理が行われました。 phpMyadmin ではコミットしているという事は無いですか? autocommit はどうなっていますか?
guest

回答2

0

自己解決

皆様コメントありがとうございました,解決いたしました。
executeした後にcloseCursorしてupdate文が実行されるたびにカーソルを閉じたところ正常に全てのupdateが実行されました。

投稿2020/11/20 05:15

EbiTT

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CREATE TABLE flowsheet_local (id INT, m_id INT,no INT,char_info VARCHAR,audio VARCHAR)

VARCHAR型は最大桁数が合った方がいいのでは?
データベースが何かタグで明示したり、バージョンを追加した方が良いです。

update flowsheet_local set char_info='q' WHERE m_id='28' AND no='1';

update flowsheet_local set audio='900ab15ef05f5664647e837d9dd45c63.mp3' WHERE m_id='28' AND no='1'

SQLではシングルクォートで囲むと文字列で扱われます。数値はシングルクォーティングしないでください。

投稿2020/11/19 06:37

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問