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); // ①
・・・・・
}
$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となるケースがあるようですので注意が必要です。