数据库
首页 > 数据库> > 使用PHP时,没有从firebird数据库接收正确的数据

使用PHP时,没有从firebird数据库接收正确的数据

作者:互联网

我有一些非常奇怪的情况.我正在对firebird数据库进行查询,并且与PHP中的结果不匹配.在DB中,结果很好,但是当涉及到PHP时,会有不同的值.

查询:

 SELECT LIST(t."ID", ',') ID,t."Date", LIST(n."Name",',') Name
    FROM "Tests" t
    LEFT JOIN "Names of tests" n ON t."Name ID" = n."ID"
    WHERE t."Locked" = 0
    GROUP BY t."Date"
    ORDER BY t."Date" DESC

DB中的结果:

ID = 546,552日期= 23.10.2015姓名=Математика(тест),География(тест)

PHP中的结果:

06001

当使用ibase_connect()连接到DB时,我使用“UTF-8”编码,数据库编码为WIN1251.

解决方法:

结果类型LIST()是blob,而不是CHAR或VARCHAR.我自己不使用PHP,但我相信PHP的Firebird / Interbase驱动程序要求您明确请求blob.

您在ID和Name中看到的值是可用于请求blob的blob id.

您有两种选择:

>使用这些blob id请求blob值,请参阅ibase_blob_openibase_blob_get(afaik,您需要自己进行正确的字节到字符转换)
>将值转换为VARCHAR(例如CAST(LIST(t.“ID”,’,’)AS VARCHAR(2048))AS ID)

第二个选项的缺点是,如果你可以有很长的结果,那么你还需要转换为长VARCHAR,否则会出现截断错误;不幸的是,varchars限制为32K-2字节(UTF8为8191个字符),整行为64K字节.

标签:php,encoding,utf-8,firebird
来源: https://codeday.me/bug/20190628/1314010.html