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);