2014/07/23

Insert処理でODBCエラー(37000)

 SQL, ODBC, PHP

 動作環境: WindowsServer2012, PHP5, DB2

「ODBC経由でのInsert処理が正しく行われない」という現象が発生しました。


同じInsert処理をコンソールから実行した場合は正しく動作する為、
SQLそのものには問題は無さそうです。

コードは下記の通りです。SQL実行時のエラーコードを確認する為、①の箇所でodbc_errorを使用します。


サンプルコード - PHP
// DB接続
$database = "Database Name";
$user = "User Name";
$password = "Password";

$conn = odbc_connect($database, $user, $password);
if(!$conn){
   // エラー処理
   ・・・・・

}

// SQL実行
$schema = "Schema Name";
$table = "Table Name";
$sql = "INSERT INTO $schema.$table (Field_01, Field_02, Field_03) VALUES ('01', '02', '03');";

$result = odbc_exec($conn, $sql);
if(!$result) {
   // エラー処理
   echo odbc_error($conn); // ①
   ・・・・・

}


上記サンプルコードの①で、SQL実行時のエラーコードを確認したところ、"37000"が返ってきました。
「Quoteが正しく閉じてない」場合などに発生するようですが、該当するような不備は見つかりません。

試行錯誤の上、試しに最後のセミコロンを外してみたところ、正しく処理されました。
(Native接続ではセミコロンを付けていても特に問題なかったのですが・・・)

ODBC接続でデータにセミコロンが含まれる場合、他にもNGとなるケースがあるようですので注意が必要です。