Firebird ibase_trans()非常慢的PHP
当我使用ibase_trans()时,脚本启动无限循环,不响应 我正在请求nusoap网络服务。 如果我只是打印nusoap数据,脚本执行时间是3秒,在我取消对启动事务的行的注释后,它将启动无限循环Firebird ibase_trans()非常慢的PHP,php,apache,transactions,firebird,Php,Apache,Transactions,Firebird,当我使用ibase_trans()时,脚本启动无限循环,不响应 我正在请求nusoap网络服务。 如果我只是打印nusoap数据,脚本执行时间是3秒,在我取消对启动事务的行的注释后,它将启动无限循环 $dbh1 = ibase_connect(DB_HOST1, DB_USER1, DB_PASS1) or die('die message'); $tr1 = ibase_trans($dbh1); 在nusoap数据循环之后,我有以下几行: $query3 = ibase_que
$dbh1 = ibase_connect(DB_HOST1, DB_USER1, DB_PASS1) or die('die message');
$tr1 = ibase_trans($dbh1);
在nusoap数据循环之后,我有以下几行:
$query3 = ibase_query($tr1,"INSERT INTO EXECUTAR ( FLAG ) VALUES ( 2 )") or die('teste');
问题从这里开始
My php version : 5.6
Xampp version: 3.2.1
Firebird: 2.5
完整代码:
if ($client->fault) {
echo "<h2>Fault</h2><pre>";
print_r($result);
echo "</pre>";
} else {
$error = $client->getError();
if ($error) {
echo "<h2>Error.</h2><pre>" . $error . "</pre>";
} else {
$dbh1 = ibase_connect(DB_HOST1, DB_USER1, DB_PASS1) or die('die message');
$tr1 = ibase_trans($dbh1);
$TotalProdutos = 0;
foreach($result['ConsultaEstoqueProdutosResult']['diffgram']['NewDataSet']['Estoques'] as $produto){
$TotalProdutos++;
$query1 = ibase_query($tr1,"INSERT INTO ATUALIZA_PRE ( CODIGO,
ESTOQUE,
ATIVO,
DISPONIVEL,
ESTOQUEDISPONIVEL,
PRECOSEMST,
PRECOREVENDA )
VALUES (
'{$produto['CODIGO']}',
'{$produto['ESTOQUE']}',
{$produto['ATIVO']},
{$produto['DISPONIVEL']},
{$produto['ESTOQUEDISPONIVEL']},
{$produto['PRECOSEMST']},
'".$produto['PRECOREVENDA']."')")or die('teste1');
}
$dbh1 = ibase_connect(DB_HOST1, DB_USER1, DB_PASS1) or die('die message');
$tr1 = ibase_trans($dbh1);
$query3 = ibase_query($tr1,"INSERT INTO EXECUTAR ( FLAG ) VALUES ( 2 )") or die('teste');
ibase_commit($tr1);
ibase_close($dbh1);
}
}
if($client->fault){
呼应“断层”;
打印(结果);
回声“;
}否则{
$error=$client->getError();
如果($error){
回显“错误”。$Error.“;
}否则{
$dbh1=ibase_connect(DB_HOST1、DB_USER1、DB_PASS1)或die('die message');
$tr1=ibase_trans($dbh1);
$TotalProdutos=0;
foreach($result['consultateastoqueprodutsresult']['diffgram']['NewDataSet']['Estoques']作为$produto){
$TotalProdutos++;
$query1=ibase_查询($tr1,“插入到ATUALIZA_前(CODIGO),
爱沙尼亚,
阿维奥,
DISPONIVEL,
ESTOQUEDISPONIVEL,
预组装,
预护卫)
价值(
“{$produto['CODIGO']}”,
“{$produto['ESTOQUE']}”,
{$produto['ATIVO']},
{$produto['DISPONIVEL']},
{$produto['ESTOQUEDISPONIVEL']},
{$produto['PRESEMST']},
“$produto['precorvenda'].”))或die('teste1');
}
$dbh1=ibase_connect(DB_HOST1、DB_USER1、DB_PASS1)或die('die message');
$tr1=ibase_trans($dbh1);
$query3=ibase_query($tr1,“插入到执行器(标志)值(2)”中)或die('teste');
ibase_commit(1美元);
ibase_close(dbh1美元);
}
}
有人能帮帮我吗?没有Firebird 2.4这样的东西,你用的是2.1还是2.5?你能不能也包括你的全部代码,因为我不明白你说的“在nusoap数据循环之后”是什么意思;这就是进入无限循环的原因吗?我已经更新了主题。问题可能是您在循环后忘记提交事务:您创建了一个新事务,但没有提交第一个事务。您还不必要地创建了一个新连接。除此之外,您应该真正使用参数化查询。目前,您对SQL注入持开放态度。然而,我没有看到任何可以解释无限循环的东西(不过,我对PHP也不太了解)。使用ibase_查询($dbh1,……和ibase_提交($dbh1)。