当前位置: 首页 > news >正文

【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题

本文内容来自YashanDB官网,原文内容请见:https://www.yashandb.com/newsinfo/7488290.html?templateId=1718516

问题现象

如下图,php使用odbc数据源,查询表数据,mysql可以显示出来,yashan显示数据被截断。
在这里插入图片描述
oracle也显示正常,如下图:
在这里插入图片描述
isql查询,超过300字节长度的c1字段,未显示,mysql和yashandb表现一致。
在这里插入图片描述

问题的风险及影响

1、php用pdo_odbc 查询超过256长度的数据,数据被截断。
2、isql查询超过300长度的数据,显示不出来。

问题影响的版本

23.2.4.14及之前版本

问题发生原因

php查询超过256字节数据,显示被截断:yashandb的odbc驱动接口SQLGetData现在只支持单次查询,不支持多次取数据的操作。
isql显示不出来,isql工具最大只查询300长度的数据,超过了该长度未正常显示。
在这里插入图片描述

解决方法及规避方式

php查询显示不出来,不用pdo_odbc扩展库,改用php odbc扩展库。
isql规避方法,更改isql中SQLGetData取数据代码(可以改成循环取数或一次取全部数据),重新编译后,再投入使用。
规避后,php能正常查询出来:
在这里插入图片描述

问题分析和处理过程

1、查看odbc.log,发现php取数据的buffer长度是256,isql的buffer长度是300。
在这里插入图片描述
2、分析php取数据应用代码
发现php_pdo取数据代码逻辑,默认最大长度为256。超过256长度的数据,则循环多次取数据,取完为止。
php pdo_odbc扩展库取数据逻辑:
在这里插入图片描述
php odbc扩展库取数据逻辑:一次取整列大小的数据,由此得出相应的规避方法,改用php odbc方式取数据,则能正常取出数据。
在这里插入图片描述
代码如下:
odbc_php_exe是规避接口

//test.phpfunction odbc_php_exe( ){print("star odbc php test\n");//$user="zabbix";//$password="123456";#$conn=odbc_connect("Driver={MySQL8.0};Server=192.168.7.134;Database= zabbix;", $user, $password);//$dsn="Driver={YashanDB};Server=192.168.24.49;Database=yashandb;port=4688;";$dsn="Yashandb";$user="sys";$password="yasdb_123";$conn=odbc_connect($dsn, $user, $password);//$conn=odbc_connect($dsn,,'123456');if (!$conn){exit("连接失败: " . $conn);}$sql = "select c1 ,c2 from test062";$rs=odbc_exec($conn,$sql);if (!$rs){exit("SQL 语句错误");}print("result:\n");while (odbc_fetch_row($rs)){$compname=odbc_result($rs,"c1");$conname=odbc_result($rs,"c2");echo "c1:$compname \n";echo "c2:$conname\n";}odbc_close($conn);echo "end\n";
}function pdo_exe( ){try{$dsn="odbc:yashandb";//$dsn="odbc:MySQLCN";$pdo=new PDO($dsn);print("conn success\n");// 使用pdo->query() 预处理并执行sql语句,以 PDOStatement 对象形式返回结果集,// 如果数据不存在则返回false$sql = "select c1 ,c2 from test062";$rs = $pdo->query($sql);// 以关联数组的方式将结果集返回$all= $rs->fetchAll(PDO::FETCH_ASSOC);print_r($all);   }catch(PDOException $e){die("fail:".$e->getMessage()."\n");}
}//pdo_exe();
odbc_php_exe();
?>

3、isql取数据逻辑
可以看到代码最大长度默认是300
在这里插入图片描述
在这里插入图片描述

相关问题单

PHP使用ODBC取长度超过255的字符串出现截断或乱码的异常

http://www.lryc.cn/news/501099.html

相关文章:

  • 暴雨AI加速计算服务器新品X8840上市
  • 在多个分布式机器间设置和使用 NFS(Network File System)共享目录的步骤如下:
  • 机器学习中的 Transformer 简介(第 1 部分)
  • D3实现站点路线图demo分享
  • 非文件形式的内存动态函数库调用接口
  • liunx docker 部署 nacos seata sentinel
  • 解决没法docker pull问题
  • 面试小札:闪电五连鞭_2
  • Milvus向量数据库06-RAG检索增强
  • 信创国产化时代:打造安全高效的信创网站解决方案
  • python编程Day13-异常介绍捕获异常抛出异常
  • 【JAVA高级篇教学】第二篇:使用 Redisson 实现高效限流机制
  • 力扣-图论-8【算法学习day.58】
  • Spring 中的验证、数据绑定和类型转换
  • Github----提交人不是自己
  • 常用工具软件
  • Oracle报错ORA-01653: 表xx无法通过 8192在表空间中扩展
  • 【C语言】库函数常见的陷阱与缺陷(3):内存分配函数
  • Vue前端实现预览并打印PDF文档
  • CSS学习记录07
  • 喆塔科技携手国家级创新中心,共建高性能集成电路数智化未来
  • 基于单片机的汽车雨刷器装置
  • 013-SpringBoot 定义优雅的全局异常处理方式
  • nginx 网页正常访问 F5 404
  • Idea Spring Initializr没有 Java 8选项解决办法
  • 【Leetcode Top 100】104. 二叉树的最大深度
  • C#实现一个HttpClient集成通义千问-开发前准备
  • 使用ssh免密登录实现自动化部署rsync+nfs+lsync(脚本)
  • 若依集成更好用的easyexcel
  • 去除背景 学习笔记