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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

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

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

1回答

918閲覧

複数PDOクエリ実行のエラー

cacao86

総合スコア97

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

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

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

1クリップ

投稿2020/04/06 05:15

編集2020/04/06 05:31

PDOクエリを複数実行すると下記のようなエラーが出てしまいます。
親が物理削除されたら子は論理削除されて表示されるようにしたいと思っています。
毎回$stmt->closeCursor()を使っていいものかと思いながら連発していますが、使っても使わなくても同じ結果が帰ってきます。
どのように複数のクエリを実行すれば良いのか教えていただきたいと思っています。
複数クエリを実行する際のテンプレートとか、こんな流れで実行すればいいなどの分かりやすいサイトなどもあれば教えてください。
公式リファレンスをみてもいまいちピンときませんでした。
よろしくお願いします。

エラー

int(1418) int(1508) DB接続エラーSQLSTATE[HY000]: General error

php

1try{ 2 // 親を論理削除 3 $db->beginTransaction(); 4 $stmt = $db->prepare("update t_bbs set deleted_at = cast(now() as datetime) where id%52=0 and parent_id is null"); 5 $stmt->execute(); 6 //論理削除された親のidを取得 7 $stmt = $db->prepare("select * from t_bbs where deleted_at is not null and parent_id is null"); 8 $stmt->execute(); 9 $parent = $stmt->fetchAll(); 10 foreach ($parent as $value) { 11 $id =[]; 12 (int)$id = $value['id']; 13 var_dump((int)$id); 14 } 15 16 //論理削除された親のidに合致するparent_idを持っている子を論理削除 17 $stmt = $db->prepare("update t_bbs set deleted_at = cast(now() as datetime) where parent_id = $id"); 18 $stmt->execute(); 19 $stmt->closeCursor(); 20 //論理削除されている親を物理削除 21 $stmt = $db->prepare("delete from t_bbs where parent_id is null and deleted_at is not null"); 22 $stmt->execute(); 23 $stmt->fetchAll(); 24 $stmt->closeCursor(); 25 //全部表示(上手くいけば物理削除された親とその子は論理削除されているので表示されないはず) 26 $stmt = $db->prepare("select * from t_bbs where deleted_at is null"); 27 $stmt->execute(); 28 $db->commit(); 29 $all = $stmt->fetchAll(); 30 var_dump($all); 31 }catch(PDOException $e){ 32 $db->rollBack(); 33 echo 'DB接続エラー' . $e->getMessage(); 34 }
| Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------------------+-------------------------------+ | id | int(11) | NO | MUL | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | subject | varchar(255) | YES | | NULL | | | body | text | YES | | NULL | | | parent_id | int(11) | YES | | NULL | | | post_user | varchar(8) | YES | | NULL | | | created_at | datetime | NO | | current_timestamp() | | | updated_at | datetime | NO | | current_timestamp() | on update current_timestamp() | | deleted_at | datetime | YES | | NULL | | +------------+--------------+------+-----+---------------------+-------------------------------+

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

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

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

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

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

guest

回答1

0

ベストアンサー

delete文をfetchAll()しているのはおかしいです

投稿2020/04/06 05:33

yambejp

総合スコア116724

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

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

cacao86

2020/04/10 08:50

ご回答ありがとうございます! fetchを取り除いたら動きました! fetch()を使うのは基本的にselectの後という認識でよろしいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問