加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:58:38 所属栏目:PHP教程 来源:网络整理
导读:我有一些非常奇怪的情况.我正在对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
我有一些非常奇怪的情况.我正在对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字节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读