關於 free at muktimedia dot com 的問題。
我們找到一個簡單的解決方案,只需在您的 SQL 陳述式中將文字轉換為 ntext。
SELECT cast ( field_name AS NTEXT ) AS field_name
Mark J Rubin
(PHP 4, PHP 5, PHP 7, PHP 8)
odbc_fetch_into — 將一個結果列擷取至陣列
將一個結果列擷取至 陣列。
回傳結果中的欄位數;錯誤時回傳 false
。
版本 | 描述 |
---|---|
8.4.0 |
statement 現在預期一個 Odbc\Result 實例;先前預期一個 資源。 |
8.4.0 |
row 現在可為 null。 |
範例 #1 odbc_fetch_into() 範例
<?php
$rc = odbc_fetch_into($res_id, $my_array);
?>
或
<?php
$rc = odbc_fetch_into($res_id, $my_array, 2);
?>
關於 free at muktimedia dot com 的問題。
我們找到一個簡單的解決方案,只需在您的 SQL 陳述式中將文字轉換為 ntext。
SELECT cast ( field_name AS NTEXT ) AS field_name
Mark J Rubin
使用 MSSQL 2000(或可能是 7)的問題::::
警告:SQL 錯誤:[Microsoft][ODBC SQL Server Driver] 無效
描述符索引,SQL 狀態 S1002 在 ... 的 SQLGetData 中
http://bugs.php.net/bug.php?id=18514
當在包含 'text' 型別(MSSQL 2K)欄位的結果集上呼叫 @ODBC_RESULT_ALL() 時,會出現上述錯誤。 如果您在 @ODBC_RESULT_ALL 中看到此錯誤,則當結果集包含 'text' 型別(MSSQL 2K)欄位時,@ODBC_FETCH_INTO() 肯定會回傳 false - 造成困擾。
變通方法:將欄位型別變更為 NTEXT (SQL 2K/7) - 這在許多情況下是更可取的(除了資料庫儲存空間),因為 NTEXT 只是 Unicode 文字。
我在 http://www.phpbuilder.com/mail/php-db/2001071/0240.php 嘗試了一種變通方法,但這沒有用。
由於 'text' 和 'memo' 欄位經常在 Win32 環境中使用,因此 PHP 的 ODBC 程式庫更新似乎會有所幫助...
當它必須在 php 版本 4.0.5、4.0.6 和 4.2.x 中變更時,使用 odbc_fetch_into() 變得令人厭煩。 此外,define() 函式在 4.2.x 中不再能很好地運作,因此 define() 對於 odbc_fetch_into() 是不可靠的。 花時間來跟上變化是不明智的。 結果更好的解決方案是使用 odbc_fetch_array,而不必處理更新資料庫、網頁等的麻煩。 從長遠來看是值得的。
--clip--(舊腳本)
define(CUSTOMER_ID,0);
define(CUSTOMER_NAME,1);
//$rows = 1;
if (odbc_fetch_row($result))
{
//odbc_fetch_into($result,1,&$user_detail); //php 4.0.5
//odbc_fetch_into($result,$row,$user_detail); //php 4.0.6
odbc_fetch_into($result,$user_detail,1); //php 4.2.x
echo $user_detail[CUSTOMER_ID];
} else {
echo "失敗!";
}
--clip--
//#########################################
--clip--(新腳本)
if (odbc_fetch_row($result))
{
while($user_detail = odbc_fetch_array($result) ) {
echo $user_detail[CUSTOMER_ID];
}
} else {
echo "失敗!";
}
--clip--
當我們不斷向資料庫表格新增欄位時,這非常有用。 如果您合併兩個表格並有兩個欄位具有相同的欄位名稱,那麼您需要有兩個單獨的陣列,例如 $user_detail1 和 $user_detail2 等。 無論您能想到什麼。
最令人惱怒的是,在 PHP 4.0.6 中,關於列號需要為非常數的新「功能」意味著此程式碼不再起作用
$row_num = 1; $row = array();
while (odbc_fetch_into($result, $row_num++, $row) {
// 執行程式碼
}
因此,如果您想知道為什麼,那就是原因。 當我升級到 4.0.6 時,這讓我對 PHP 的所有其他問題感到非常憤怒
幸運的是,變通方法很容易。 只需在 odbc_fetch_into() 中使用 $row_num,並在 while 迴圈內新增 $row_num++ 即可。 但它仍然非常令人惱怒! 我還沒有發現任何其他函式有這個問題..
(Win32)當針對 Access 97 表格呼叫此函式時,如果第二個參數以您要擷取的列傳遞進來,則無論傳遞的值為何,您似乎都會一直取得相同的列。 解決方案:不要傳遞第二個參數,一切都會自動正確遞增。
此函式與 odbc_result 互動,它似乎會遞增目前查詢結果的內部記錄指標。 因此,如果您使用此函式並希望在 odbc_result 中使用剛擷取的記錄; 您必須使用目前列號再次呼叫 odbc_fetch_result。 如果您的查詢結果包含單一記錄,此行為可能會特別令人困惑。 在這種情況下,使用 odbc_fetch_into 似乎會中斷 odbc_result。
不要從第 0 列開始
當使用 odbc_fetch_into($id,$row_num,$array) 時,請勿將 $row_num=0 初始化。
為什麼... 好吧,如果您這樣做並且表格中有一條記錄,您會收到錯誤... 不是問題。 但是,如果表格中有不只一列,則不會出現錯誤,並且表格中的第一筆記錄會遺失。
這可能看起來很明顯,但請記住,我們計算很多東西都是從 0 開始的,所以在這裡這樣做在我看來是合理的。我花了不少時間才解決這個問題,因為我曾在另一個頁面上使用相同的方法,而該頁面有多筆資料列,而且運作良好。我只是從未注意到它無法印出第一筆資料的資訊。所以你可以想像當程式碼在一個頁面上運作,而在另一個頁面上卻無法運作時,我的困惑。
從 php 4.0.5 升級到 php 4.0.6,以下語法不再有效
odbc_fetch_into($result,$start-1,&$fields);
在 4.0.5 中它可以運作,但在 4.0.6 中會產生此錯誤
只能透過參考傳遞變數
但是,以下幾行程式碼可以運作
$tmp=$start-1;
odbc_fetch_into($result,$tmp,&$fields);
這是一個非常簡單的方法,可以將 SQL 結果傾印到一個可以編輯和操作的陣列中。
==============================================
//建立陣列
$row = array();
while (odbc_fetch_into($res, $row, ODBC_NUM)) {
array_push($stuff,$row);
}
//結果現在在一個陣列中。若要將陣列顯示為 HTML 表格,我們可以使用以下程式碼
foreach($stuff as $line){
echo "<tr>\n";
foreach($line as $field){
echo "<td>".$field."</td>\n";
}
}
==============================================
使用此方法可以讓人控制每一列和欄位中的個別資料元素。我更熟悉 ASP 和 getrows 函數,但這是目前我能找到最接近的等效方法。
一位好朋友和同事能夠確定如何讓這個方法運作。感謝 Robby。