【问题标题】:Why wouldn't a perfect SQL statement execute on oci_excute?为什么不能在 oci_excute 上执行完美的 SQL 语句?
【发布时间】:2012-06-30 05:38:17
【问题描述】:

我有一些 PHP 代码通过 OCI8 库写入 Oracle 数据库。我有一个不会以编程方式执行的插入语句 - 如果我打印出该语句并通过 SquirrelSQL 运行它,它将成功插入数据。我在代码的其他地方有删除和选择语句,它们运行良好。可能是什么问题?正如我所说,如果我打印 $om_query 并手动运行它会成功插入。我没有收到任何其他错误。

$om_query = "INSERT INTO DB.TABLE(R1,R2) VALUES(V1,V2)";
$s2 = oci_parse($conn, $om_query);
$qs = oci_execute($s2);
oci_commit ($conn); 

if(!$qs){
    $ma = oci_error();
    $failedqueries .= '<br /><br />MAINQ: ' . $om_query . '<br /><b>OCI_ERROR_MSG: </b>' . $ma['message'];
}

oci_error() 不附加任何有用的东西。

【问题讨论】:

  • 也许它不会失败? (写“故障检查不会触发”)
  • 不会产生任何可见的错误,也不会触发错误条件。我可以在 SquirrelSQL 上看到数据库,并且可以看到它没有输入(当我通过 Squirrel 和我的应用程序的数据管理部分运行手动查询时,我可以看到它已输入)。也删除作品。
  • 我认为您需要立即检查错误,(在提交之前)。提交可能会向数据库发送另一个查询 (COMMIT),导致它丢弃最后生成的错误消息。
  • 你说 oci_error() 没有附加任何有用的东西。它附加了哪些无用的东西?
  • 您认为V1V2 代表什么?它们不是文字;它们不能是表中的列,那么它们是什么?也许您的问题的答案是“没有完美的 SQL 语句”。

标签: php sql oracle oci8


【解决方案1】:

检查您在受影响的表上没有打开的事务。 PL 可能正在尝试删除插入的记录。

在 Oracle 中,您必须在修改数据后执行 COMMIT 或 ROLLBACK 操作(无论是通过插入、更新还是删除)。

【讨论】:

  • Respondo con el fin de que a aalguna persona en un futuro le sirva la solución, ya que yo tenia ese problema y tarde mucho en concontrar la solución。
  • 欢迎来到本站。您不能假设读者(和问题的原始海报)理解西班牙语。该网站以英语运行。见How to Answer。请编辑您的答案以通过翻译改进它。
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2017-07-02
  • 2020-05-12
  • 2020-01-06
  • 2019-04-12
  • 1970-01-01
相关资源
最近更新 更多