关于 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 现在可以为空。 |
示例 #1 odbc_fetch_into() 示例
<?php
$rc = odbc_fetch_into($res_id, $my_array);
?>
或者
<?php
$rc = odbc_fetch_into($res_id, $my_array, 2);
?>
关于 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中的解决方法,但这不起作用。
PHP 似乎可以从其 ODBC 库的更新中获益,因为“text”和“memo”字段经常在 Win32 环境中使用……
当在 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 等。您可以想到的任何方法。
最烦人的是,使用 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。