プロが教える店舗&オフィスのセキュリティ対策術

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文にすると正確に表示されます。

どなたかおわかりになる方いらっしゃいましたらご教授お願い致します。

A 回答 (2件)

> どうやら「'SQLSTATE[42000]: 」と表示されていてSQL文にミスがあるようです。



質問にあるソースコードをよく拝見したらSQL文が間違っていることに気付きました。

$update='update test set count=? used_day=? where id=?';

ではなく、正しくは

$update='update test set count=?, used_day=? where id=?';

です。カンマが抜けていますよ。
    • good
    • 0
この回答へのお礼

x_jouet_x 様

何から何までご指導有難うございます。
完成しました。

こんな簡単なミスにも気付かず、時間を費やしていました。

お礼日時:2009/07/23 00:02

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を使わずに全部一個づつ更新する方法もありますけど、一気に更新したいと考えてますが中々難しく上手く行きません。

補足日時:2009/07/22 21:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!