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 | | +------------+--------------+------+-----+---------------------+-------------------------------+
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/10 08:50