ibase_fetch_assoc在windows xp上返回错误

时间:2013-04-30 08:59:47

标签: php interbase

这是一个简单的代码,用于从InterBase数据库中获取一些数据:

<?php
$host = 'localhost:C:/ME/DB/test.GDB';
$username='SYSDBA';
$password='*******';

if (!($dbh=ibase_connect($host, $username, $password, 'ISO8859_1', 0, 1)))
    die('Could not connect: ' .  ibase_errmsg());

$stmt = 'SELECT * FROM DB where CODE >= 4400';

$sth = ibase_query($dbh, $stmt);
$letters = array();
while ($row = ibase_fetch_assoc($sth)) {
    echo $row['CODE'] . ' ';
}

ibase_free_result($sth);
ibase_close($dbh);
?>

该代码在Windows 7上正常工作但在XP上(代码应该在生产中工作)它返回以下错误:

  

ibase_fetch_assoc():算术异常,数字溢出或字符串   截断不能在字符集之间音译字符

任何人都知道如何让它发挥作用?

P.S。 这里的文档说http://www.php.net/manual/en/function.ibase-query.php

  

如果出现“算术异常,数字溢出或”等错误   字符串截断。字符之间不能音译   设置“(当你尝试使用带有重音符号的某个字符时会发生这种情况)   使用此选项并在ibase_query()之后,您必须设置字符集   (即ISO8859_1或您当前的字符集)。

这是我的解决方案吗?如果是我应该如何设置字符集?

1 个答案:

答案 0 :(得分:2)

您需要在ibase会话中设置正确的字符集集。如果没有设置php遵循默认值。由于您已经设置了charset,因此您可能在数据库中拥有无效的ISO-8859-1数据。

连接到数据库时,将charset设置为ibase_connect中的第4个参数。 你要么必须设置&#34;正确&#34; charset或在某些情况下你可以使用charset&#39; NONE&#39;如果您使用“无”&#39;您将不会进行任何字符转换并使用更多或更少的原始数据。

尝试连接:

if (!($dbh=ibase_connect($host, $username, $password, 'NONE', 0, 1)))
    die('Could not connect: ' .  ibase_errmsg());