2024 PHP 日本大会

odbc_fetch_into

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

odbc_fetch_into将一行结果取到数组中

描述

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

将一行结果取到数组中。

参数

statement

ODBC 结果对象。

array

结果数组,可以是任何类型,因为它将被转换为数组类型。数组将包含从数组索引 0 开始的列值。

row

行号。

返回值

返回结果中的列数;出错时返回false

变更日志

版本 描述
8.4.0 statement 现在需要一个 Odbc\Result 实例;以前需要一个 资源
8.4.0 row 现在可以为空。

范例

示例 #1 odbc_fetch_into() 示例

<?php
$rc
= odbc_fetch_into($res_id, $my_array);
?>

或者

<?php
$rc
= odbc_fetch_into($res_id, $my_array, 2);
?>

添加注释

用户贡献的注释 10 条注释

php at nospamplease dot markjrubin dot com
20 年前
关于 muktimedia dot com 的问题。

我们找到一个简单的解决方案,只需在 SQL 语句中将文本强制转换为 ntext。

SELECT cast ( field_name AS NTEXT ) AS field_name

Mark J Rubin
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中的解决方法,但这不起作用。

PHP 似乎可以从其 ODBC 库的更新中获益,因为“text”和“memo”字段经常在 Win32 环境中使用……
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,而不必处理更新数据库、网页等的麻烦。从长远来看,这是值得的。

--片段--(旧脚本)
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 "失败!";
}
--片段--
//#########################################
--片段--(新脚本)
if (odbc_fetch_row($result))
{
while($user_detail = odbc_fetch_array($result) ) {
echo $user_detail[CUSTOMER_ID];
}
} else {
echo "失败!";
}
--片段--

当我们不断向数据库表添加列时,这非常有用。如果您组合两个表并具有两个具有相同列名的列,则需要有两个单独的数组,例如 $user_detail1 和 $user_detail2 等。您可以想到的任何方法。
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++。但这仍然非常烦人!我没有发现任何其他函数存在此问题..
scott at gamesonline dot com
25 年前
(Win32)当针对 Access 97 表调用此函数时,如果第二个参数作为要检索的行传递,则看起来您将继续获得相同的行,而不管传入的值如何。解决方案:不要传入第二个参数,一切都会自动递增。
vbhunt at silverfox dot com
26 年前
此函数与odbc_result函数交互,因为它似乎会递增当前查询结果的内部记录指针。因此,如果您使用此函数并希望将刚刚获取的记录用于odbc_result;您必须使用当前行号再次调用odbc_fetch_result。如果您的查询结果包含单个记录,则此行为尤其令人困惑。在这种情况下,使用odbc_fetch_into似乎会破坏odbc_result。
alvaro at demogracia dot com
13年前
如果读取行时出错,或者没有更多行可用,它将返回FALSE。
PHP at TeamBurke dot com dot NoSpam
22 年前
不要从第0行开始

使用odbc_fetch_into($id,$row_num,$array)时,不要初始化$row_num=0。

原因……如果您这样做,并且表中只有一条记录,您将收到错误……这不是问题。但是,如果表中有多于一行记录,则不会出现错误,并且表中的第一条记录将会丢失。

这看起来可能很明显,但请记住,我们从0开始计数很多东西,所以在我的想法中这样做是有意义的。花了相当长的时间才解决这个问题,因为我在另一个页面上使用了相同的方法,那里有多行记录,并且该页面工作正常。我只是没有注意到它未能打印第一条记录的信息。所以你可以想象当我代码在一个页面上工作而在另一个页面上不工作时的困惑。
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);
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