关于 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
。
范例 #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 驱动程序]无效
描述符索引,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。