• ベストアンサー

PHPからMySQLを操作

お世話になっております。 PEAR::MDB2をインストールし、PHPからクエリーを発行してDBへデータを登録したく思っています。 しかし、「MDB2 Error: syntax error」というエラーがでてしまいます。 クエリーは間違っていないはずです。他のPCでの動作は確認できています。 プログラム /* foreach($str1 as $key => $value){ $sql = "INSERT INTO book_content(author, name, date, publish, path, content) VALUES('".cnv_sqlstr(cnv_dbstring($value, $db_enc))."', '".cnv_sqlstr(cnv_dbstring($str2[$key], $db_enc))."', '".cnv_sqlstr(cnv_dbstring($str3[$key], $db_enc))."', '".cnv_sqlstr(cnv_dbstring($str5[$key], $db_enc))."', '".cnv_sqlstr(cnv_dbstring($str4[$key], $db_enc))."', '".cnv_sqlstr(cnv_dbstring($str6[$key], $db_enc))."');"; // クエリを発行 $res =& $mdb2->query($sql); // 結果がエラーでないかどうかを常にチェック if (PEAR::isError($res)) { die($res->getMessage()); } } */ どなたかアドバイスお願いします。 PHPバージョン Version 5.2.10-2ubuntu6.3 Apacheバージョン 2.2.12-1ubuntu2.1 OS Linux ubuntu 2.6.31-16-generic

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

INSERT に使うのは query ではなく exec です。 それと、直接の回答ではありませんが、SQL文を直接作るのではなく、prepared statement を使う方がSQLインジェクション問題などについて安全になりますし、SQL文が見やすくなります。 cnv_sqlstr や cnv_dbstring が何を行う関数かわかりませんので、ちょっと推測が入ってますが、prepared statement を使うと cnv_sqlstr がSQL用のクオート処理をする関数だったら、それは不要なので以下のような感じになるかと。 $sql = "INSERT INTO book_content (author, name, date, publish, path, content) VALUES ( ?, ?, ?, ?, ? ? )"; $arg = array( cnv_dbstring($value, $db_enc), cnv_dbstring($str2[$key], $db_enc), cnv_dbstring($str3[$key], $db_enc), cnv_dbstring($str5[$key], $db_enc), cnv_dbstring($str4[$key], $db_enc), cnv_dbstring($str6[$key], $db_enc)); $res =& $mdb2->queryParam($sql, $arg);

coco218-8
質問者

お礼

ご回答頂きましてありがとうございました。 上記にある、prepared statementについては知りませんでした。動的に変わる部分を、プレースホルダー「?」としておき、実行時にqueryParam()メソッドを使ってここに値を渡すのですね。これは勉強になりました。 >cnv_sqlstr がSQL用のクオート処理をする まさにその通りです。ご回答下さった記述を参考にして修正を加え、再度実行しなおしてみました。 エラーなくDBへ登録が完了しました。 無事解決に至り感謝しております。ありがとうございました。

その他の回答 (1)

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

データを操作するクエリを発行する場合はqueryメソッドではなくexecメソッドを使うのではなかったでしょうか。

coco218-8
質問者

お礼

ご回答下さりありがとうございました。 とても参考になりました。 無事解決に至り感謝しております。重ねてお礼申し上げます。

関連するQ&A