- 締切済み
PDOの複数クエリ
PHP5.29 Apache2 MySQL5 PDOを使用して複数クエリを実行しようとしています。 update文、delete文が失敗してしまいます。 ------------------------------------------------- データベース接続省略 $id=$_POST['id'];要素が数値の配列 $time=$_POST['myFormDate'];//0000-00-00型の日付 $count=$_POST['count'];//数値の配列 上記3つの変数はprintし、変数は代入されている。 for($i=0;$i<count($id);$i++) { $update='update test set count=? used_day=? where id=?'; $stmt=$db->prepare($update); $flag=$stmt->execute(array($count[$i],$time,$id[$i])); if ($flag){ print('データ更新に成功しました<br>'); }else{ print('データ更新に失敗しました<br>'); } } --------------------------------------------------------- 何故これでupdate出来ないのか、またはdelete文にしても削除されないのか全くわかりません。select文にすると正確に表示されます。 どなたかおわかりになる方いらっしゃいましたらご教授お願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- x_jouet_x
- ベストアンサー率68% (162/236)
> どうやら「'SQLSTATE[42000]: 」と表示されていてSQL文にミスがあるようです。 質問にあるソースコードをよく拝見したらSQL文が間違っていることに気付きました。 $update='update test set count=? used_day=? where id=?'; ではなく、正しくは $update='update test set count=?, used_day=? where id=?'; です。カンマが抜けていますよ。
- x_jouet_x
- ベストアンサー率68% (162/236)
PDOでDB接続はあまり行ったことがありませんが・・・。 下記のようにsetAttribute()関数で例外処理を有効にできませんか? ---------- $dbh = new PDO(...); $dbh->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_EXCEPTION); ---------- 例外処理を有効にできたら下記のようにクエリー実行時に例外が出ていないか確認してみて下さい。 ---------- try { $flag=$stmt->execute(array($count[$i],$time,$id[$i])); } catch(PDOException $exception) { echo $exception->getMessage(); } ----------
補足
x_jouet_x様 ご指導有難うございます。 例外が見つかりました。どうやら「'SQLSTATE[42000]: 」と表示されていてSQL文にミスがあるようです。どう考えても見つかりそうにないですが…。 PDOを使わずに全部一個づつ更新する方法もありますけど、一気に更新したいと考えてますが中々難しく上手く行きません。
お礼
x_jouet_x 様 何から何までご指導有難うございます。 完成しました。 こんな簡単なミスにも気付かず、時間を費やしていました。