「phpからFreeTDSにつなぐ」の編集履歴(バックアップ)一覧はこちら
「phpからFreeTDSにつなぐ」(2017/05/27 (土) 21:51:06) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
コマンドライン版の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を再コンパイルして、maki install でapacheを再起動。~
もう一度実行してみる。~
エラーはでなくなりました。 これで心配なく使えます。
コマンドライン版の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を再起動。~
もう一度実行してみる。~
エラーはでなくなりました。 これで心配なく使えます。
[[unixODBCでDB2を使った時のnullの問題]]
表示オプション
横に並べて表示:
変化行の前後のみ表示: