首页 > 解决方案 > PHP ODBC I/O 包默认不是线程安全的

问题描述

我有一个正常工作的小型 PHP 选择脚本,我用另一个替换了我的 php ini 文件,从那时起我收到以下错误消息:

警告:odbc_exec():SQL 错误:应用程序诊断:复制内存时检测到可能的 I/O 竞争条件。默认情况下,I/O 包不是线程安全的。在多线程应用程序中,必须以线程安全的方式访问流,例如 TextReader 或 TextWriter 的 Synchronized 方法返回的线程安全包装器。这也适用于 StreamWriter 和 StreamReader 等类。第 8 行 C:\xampp\htdocs\standsafe\dbscripts\sage\importSales.php 中的 SQLExecDirect 中的 SQL 状态 HY000

这是我的 php 脚本

<?php
$num_minutes = 10;
ini_set('max_execution_time', (60*$num_minutes));

$conn = odbc_connect("CData Sage50UK Source","manager","mypassword");
$query = odbc_exec($conn, "SELECT * FROM SalesOrders WHERE CustomerReference = '06/08/18' limit 1");

while($row = odbc_fetch_array($query)){

    $json1[] = array_map('utf8_encode', $row);

}   

echo json_encode($json1);
?>

w php.ini 文件中一定发生了一些变化,但我不再拥有旧的了!有人可以帮忙吗?

标签: phpmultithreadingodbc

解决方案


我发现问题实际上出在 Sage 中,并通过重新启动 sage SData(工具 > Internet 选项 > SData 设置)得到解决。看起来 Sage 软件同时尝试从同一个数据文件中读取或写入。


推荐阅读