【问题标题】:Two queries in one statement一个语句中的两个查询
【发布时间】:2013-08-14 17:15:55
【问题描述】:

我正在使用 php,并且想在 oracle 的一个语句中运行两个更新查询。

$x = strtolower($x);
$ore = getOreType($x); //returns ore type as string
$newTotal = getMined($ore)-($x_value*$weight); //adds existing ore quantity to additional quantity
$newTotalComp = $x_value + getComponentQuantity($x); //adds existing component quantity to additional quantity
$query = "UPDATE Material SET quantity=$newTotal WHERE name='$ore'; UPDATE Component SET   quantity=$newTotalComp WHERE name='$x'";
$statement = ociparse($conn, $query);
oci_execute($statement);
oci_free_statement($statement);

我在 oci_execute 上收到以下错误....

 oci_execute(): ORA-00911: invalid character

是否可以在同一个语句中运行两个更新?它适用于 Oracle SQL Developer。

【问题讨论】:

  • 1- 我已经设置了计时器 2- 打开谷歌并粘贴了那个错误 3- 我打开了一个随机链接并获得this one。您基本上不能使用;,这意味着您不能使用两个语句?我在不到一百万的时间内得出了这个结论。请做一些研究。
  • 不,你不能,因为客户端库就是这样工作的。这实际上适用于 PHP 的大多数(全部?)数据库驱动程序,MySQLi 支持它,但前提是您调用 special function specifically for that job(显然,它不会在这里对您有所帮助)。但是,如果您可以显示有关您的数据库架构以及这两个表如何相互关联的更多信息,则可以使用 JOINs 在单个操作中压缩两个查询
  • 另外,您的代码对 SQL 注入是开放的——您似乎正在使用准备好的语句 (oci_parse()),但仍未将值绑定到占位符...

标签: php oracle


【解决方案1】:

试试看

$query = "UPDATE Material,Component 
          SET Material.quantity=$newTotal , Component.quantity=$newTotalComp 
          WHERE Material.name='$ore' AND  Component.name='$x'";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 2023-03-21
    • 2017-08-07
    • 2011-06-06
    • 2014-01-07
    • 1970-01-01
    相关资源
    最近更新 更多