ma-100140 @ ウィキ
phpからFreeTDSにつなぐ
最終更新:
ma-100140
-
view
コマンドライン版のPHPからunixODBCを使ってみよう。
メインの部分は以下
$conn = odbc_connect( "SQLServer", "uid", "pass"); #$sql = "select * from 社員コードテーブル ;"; $rs = odbc_exec($conn,$sql); if (odbc_error()) { echo odbc_errormsg($conn); exit(1) ; }//end of if
実行すると、なぜかデータを表示するけど、エラー
セグメンテーション違反です
なんだろう?ネットで探すと、ああ、ある。これだな。
http://d.hatena.ne.jp/root8537/20140916/1410880230
phpのソースの中の以下のソースみたい。
/ext/odbc/php_odbc.c
#endif /* HAVE_ADABAS */ default: rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_DISPLAY_SIZE, NULL, 0, NULL, &displaysize); displaysize = displaysize <= result->longreadlen ? displaysize : result->longreadlen; /* Workaround for Oracle ODBC Driver bug (#50162) when fetching TIMESTAMP column */ if (result->values[i].coltype == SQL_TIMESTAMP) { displaysize += 3; } //result->values[i].value = (char *)emalloc(displaysize + 1); //rc = SQLBindCol(result->stmt, (SQLUSMALLINT)(i+1), SQL_C_CHAR, result->values[i].value, // displaysize + 1, &result->values[i].vallen); //コメントアウトした部分を以下のように変更。displaysize + 1をdisplaysize + 4に変更。 result->values[i].value = (char *)emalloc(displaysize + 4); rc = SQLBindCol(result->stmt, (SQLUSMALLINT)(i+1), SQL_C_CHAR, result->values[i].value, displaysize + 4, &result->values[i].vallen); break; } } return 1; }
phpを再コンパイルして、make install でapacheを再起動。
もう一度実行してみる。
エラーはでなくなりました。 これで心配なく使えます。