ma-100140 @ ウィキ
phpからFreeTDSにつなぐ
最終更新:
ma-100140
コマンドライン版の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を再起動。
もう一度実行してみる。
エラーはでなくなりました。 これで心配なく使えます。