PHP Conference Japan 2024

odbc_fetch_into

(PHP 4, PHP 5, PHP 7, PHP 8)

odbc_fetch_into將一個結果列擷取至陣列

描述

odbc_fetch_into(Odbc\Result $statement, array &$array, ?int $row = null): int|false

將一個結果列擷取至 陣列

參數

statement

ODBC 結果物件。

array

結果 陣列,可以是任何型別,因為它會轉換為陣列型別。 陣列將包含從陣列索引 0 開始的欄位值。

row

列號。

回傳值

回傳結果中的欄位數;錯誤時回傳 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);
?>

新增註解

使用者貢獻的註解 10 則註解

1
php at nospamplease dot markjrubin dot com
20 年前
關於 free at muktimedia dot com 的問題。

我們找到一個簡單的解決方案,只需在您的 SQL 陳述式中將文字轉換為 ntext。

SELECT cast ( field_name AS NTEXT ) AS field_name

Mark J Rubin
0
free at muktimedia dot com
21 年前
使用 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 程式庫更新似乎會有所幫助...
0
scott at abcoa dot com
22 年前
當它必須在 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 等。 無論您能想到什麼。
0
matt(at)lazycat(dot)org
23 年前
最令人惱怒的是,在 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++ 即可。 但它仍然非常令人惱怒! 我還沒有發現任何其他函式有這個問題..
-1
scott at gamesonline dot com
25 年前
(Win32)當針對 Access 97 表格呼叫此函式時,如果第二個參數以您要擷取的列傳遞進來,則無論傳遞的值為何,您似乎都會一直取得相同的列。 解決方案:不要傳遞第二個參數,一切都會自動正確遞增。
-1
vbhunt at silverfox dot com
26 年前
此函式與 odbc_result 互動,它似乎會遞增目前查詢結果的內部記錄指標。 因此,如果您使用此函式並希望在 odbc_result 中使用剛擷取的記錄; 您必須使用目前列號再次呼叫 odbc_fetch_result。 如果您的查詢結果包含單一記錄,此行為可能會特別令人困惑。 在這種情況下,使用 odbc_fetch_into 似乎會中斷 odbc_result。
-2
alvaro at demogracia dot com
13 年前
如果讀取列時發生錯誤,也會回傳 FALSE,但當沒有更多列可用時也會回傳。
-2
PHP at TeamBurke dot com dot NoSpam
22 年前
不要從第 0 列開始

當使用 odbc_fetch_into($id,$row_num,$array) 時,請勿將 $row_num=0 初始化。

為什麼... 好吧,如果您這樣做並且表格中有一條記錄,您會收到錯誤... 不是問題。 但是,如果表格中有不只一列,則不會出現錯誤,並且表格中的第一筆記錄會遺失。

這可能看起來很明顯,但請記住,我們計算很多東西都是從 0 開始的,所以在這裡這樣做在我看來是合理的。我花了不少時間才解決這個問題,因為我曾在另一個頁面上使用相同的方法,而該頁面有多筆資料列,而且運作良好。我只是從未注意到它無法印出第一筆資料的資訊。所以你可以想像當程式碼在一個頁面上運作,而在另一個頁面上卻無法運作時,我的困惑。
-2
doc at vulcanmicro dot com
23 年前
從 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);
-1
brian m
20 年前
這是一個非常簡單的方法,可以將 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。
To Top