PEAR_DBを使う場合のSQL予約語との衝突エラー

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

現在、OpenPNEの拡張を行っていますが、本日遭遇したバグ。
OpenPNEは、データベースの操作に、PHPのライブラリ、PEAR_DBが使ってあります。
拡張で追加したテーブルに、新規にレコードを挿入する処理を書いていたのですが、このとき悩ましいバグに当りました。

スポンサーリンク

$table_name = 'hoge_table';
$data = array(
    'hoge' => $hoge,
    'inner' => $foo,    // こいつ
    'outer' => $bar,    // こいつ
    'set' => $baz,    // こいつ
    'fuga' => $fuga,
);
 
// レコード挿入
db_insert($table_name, $data);    // エラー!

db_insert() は、$table_name にはDBテーブル名を指定、$data は、挿入するデータのハッシュ(フィールド名 ⇒ レコード値 が一要素)を指定する関数です。
このとき、上記のように$data というハッシュを作っていたのですけど(実際には、フィールドが30以上あるので、もっと要素数の多いハッシュ)、何度やってもエラーになる。

よって、ハッシュをひとつずつ試しながらチェックしたところ、フィールド名にinner, outer, set を使っているところでエラーが発生していることが判明。
どうやらこれらの単語が、SQL予約語なので、衝突してエラーになっていたみたいです。

あとで気づいたのですが、そういえばSQL文には、INNER JOIN, OUTER JOIN, SET CHARACTER SET などの構文があります。
ですので、SQL文の予約語になっている単語は、フィールド名(カラム名)には使わないほうが良さそうです。
結局、フィールド名を変更、ハッシュもそれに応じて変更したところ、なんなく処理が通りました。

スポンサーリンク
 
スポンサーリンク