• ベストアンサー

MDB2 プリペアードステートメントについて

顧客情報管理システムを開発居しています。 下記のコードはMDB2を使用して、既に入力された情報を変更するための物をテストのため簡略化した物(のはず)ですが、$res = $sth -> execute ($data);の部分でエラーが発生してしまいます。 おそらくプリペアードステートメントの問題だと思い調べてみましたがお手上げです。。 知っている方からすればかなり馬鹿らしい間違いだと思いますが。。。 教えて下さい。 ちなみにmySQLを使用しています。 <?php //DBへの接続に必要な処理は完了し、$mdb2と言うオブジェクトは既に存在している。 $sql = "UPDATE customer_list SET name = ?,post = ?,address = ?,email = ? WHERE code = ?"; $typ = array("text","integer","text","text","integer"); $sth = $mdb2 -> prepare($sql,$typ); $data = array($_POST['name'],$_POST['post'],$_POST['add'],$_POST['email'],$_POST['code']); echo $data; $res = $sth -> execute ($data); ?>

質問者が選んだベストアンサー

  • ベストアンサー
noname#227352
noname#227352
回答No.2

試していないので憶測で…。 データベースの変更が伴うプリペアードステートメントの場合は、下記のようになるかと思います。 $sth = $mdb2 -> prepare($sql,$typ,MDB2_PREPARE_MANIP); 余談 >$res = $sth -> execute ($data);の部分でエラーが発生してしまいます。 上記の場合、発行しているクエリの記述ミスがほとんどです。データベースから結果が受け取れなかった場合に起きます。 hogehoge78さんのアドバイス通り、エラーの場合の処理を記述した方が良いです。 if(PEAR::isError($db)) die($db->getMessage());

amcars
質問者

お礼

回答有り難うございます。 その通りです。。何事も無かったかのように動作しました。。。 MDB2_PREPARE_MANIPの存在を知りませんでした。。 新規登録用にINSERTも使っていますが、こちらは無しで動作しています。。。INSERTは変更が伴わないと言う認識なのでしょうか?? もう一つ教えて下さい。。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

MDB2は使ったこと無いのですが、 if(PEAR::isError($db)) die($db->getMessage()); とかで、出てきたエラーを見た場合、何が表示されますか? また、プリペアドステートメントの?の部分に手入力で何らかの値を挿入し、MySQLAdminや、コマンドラインで直接叩いた場合、UPDATEは正常に行えるのでしょうか。

amcars
質問者

お礼

回答有り難うございます。 その処理は記述したコードの上に書いていますが、何のエラーも出ません。 SQLへの接続は問題ないと言う事だと思います。 MySQLAdminで試した後にコピーアンドペーストでもって来ています。 もう一度試しましたが問題無しでした。。。

すると、全ての回答が全文表示されます。

関連するQ&A