而且,在 PHP 中使用 odbc 的 function,無法存取 UTF-8 的資料。但使用 COM,只要在建立時,指定 UTF-8 編碼即可。
<?php
function hh($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("hh");
$dual = new COM("ADODB.Connection", null, CP_UTF8);
$dual->Open("dual_odbc", "uid", "password");
$sql = "SELECT top 10 *, FROM cousched where ser_no <= '20000' ";
// $c_course = odbc_exec($dual, $sql);
try {
$rs = $dual->execute($sql);
while(!$rs->eof) {
echo $rs->fields("cou_cname")->value()."<br>\n";
$rs->movenext();
}
} catch (Exception $e) {
echo nl2br($e->getMessage())."<br>\n";
echo nl2br($e->getTraceAsString());
exit;
}
$dual->close();
上面的程式,有加上 error handler 的處理。可以參考下面的連結Unexpected behavior using try-catch statement when using odbc_exec in PHP
程式中的 SQL 語法是錯的,用來測試 error handling 的功能是否正常。
執行的結果如下,
Source: Microsoft OLE DB Provider for ODBC Drivers
Description: [Microsoft][ODBC SQL Server Driver][SQL Server]關鍵字 'FROM' 附近的語法不正確。
#0 E:\Inetpub\wwwroot\ajtest\ado_tst.php(17): com->execute('SELECT top 10 *...')
#1 {main};
應急時,在使用上,蠻方便的。在 ADODB.Command 的 execute 指令中,ASP 程式可以省略第一個參數 (row affected),但 PHP 不能省略,一定要塞一個變數,此變數不用事先定義。
$SQL = "select * from course where cou_no=? ";
$params = array($cou_no);
new COM("ADODB.Connection", null, CP_UTF8);
$cmd = new COM("ADODB.Command", null, CP_UTF8);
$cmd->CommandText = $SQL;
$cmd->ActiveConnection = $conn;
$rs = $cmd->Execute($ra, $params, 1);
$cmd->cancel();
沒有留言:
張貼留言