中国移动网站备案管理系统,东莞常平医院,牧羊人wordpress博客,网站仿制教程本文内容来自YashanDB官网#xff0c;原文内容请见#xff1a;https://www.yashandb.com/newsinfo/7488290.html?templateId1718516
问题现象
如下图#xff0c;php使用odbc数据源#xff0c;查询表数据#xff0c;mysql可以显示出来#xff0c;yashan显示数据被截断。…本文内容来自YashanDB官网原文内容请见https://www.yashandb.com/newsinfo/7488290.html?templateId1718516
问题现象
如下图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长度是256isql的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);//$userzabbix;//$password123456;#$connodbc_connect(Driver{MySQL8.0};Server192.168.7.134;Database zabbix;, $user, $password);//$dsnDriver{YashanDB};Server192.168.24.49;Databaseyashandb;port4688;;$dsnYashandb;$usersys;$passwordyasdb_123;$connodbc_connect($dsn, $user, $password);//$connodbc_connect($dsn,,123456);if (!$conn){exit(连接失败: . $conn);}$sql select c1 ,c2 from test062;$rsodbc_exec($conn,$sql);if (!$rs){exit(SQL 语句错误);}print(result:\n);while (odbc_fetch_row($rs)){$compnameodbc_result($rs,c1);$connameodbc_result($rs,c2);echo c1:$compname \n;echo c2:$conname\n;}odbc_close($conn);echo end\n;
}function pdo_exe( ){try{$dsnodbc:yashandb;//$dsnodbc:MySQLCN;$pdonew 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的字符串出现截断或乱码的异常