这是一个简单的代码,用于从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或您当前的字符集)。
这是我的解决方案吗?如果是我应该如何设置字符集?
答案 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());