ID:29863 PHPからMySQLを操作
by coco218-8 2010-01-11 09:53:13 / view 436
| お世話になっております。 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 |
ID:29864 mtaka2さんからのお返事です
by mtaka2 2010-01-11 09:53:23
| 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); |


