PEAR_DBを使う場合のSQL予約語との衝突エラー
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
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文の予約語になっている単語は、フィールド名(カラム名)には使わないほうが良さそうです。
結局、フィールド名を変更、ハッシュもそれに応じて変更したところ、なんなく処理が通りました。
スポンサーリンク
>> 次の記事 : MySQLバックアップ・phpMyAdminでエクスポート手順
- - 関連記事 -
- データベースのER図を簡単に描けるDBDesigner 4
- ローカルマシンへのFTPダウンロード(バックアップ)を、batファイル+windowsタスクスケジューラで自動化
- MySQLバックアップ・phpMyAdminでエクスポート手順
スポンサーリンク