【问题标题】:Update query in a PHP page is not updating multiple rows, even if no error message is recieved即使没有收到错误消息,PHP 页面中的更新查询也不会更新多行
【发布时间】:2020-02-14 11:26:18
【问题描述】:

我正在使用 PHP 页面更新两个表。第一个表有一行要更新,第二个表有多行要在 where 子句上更新。问题是第一个表已成功更新,但第二个表未更新。虽然没有收到错误。 set 中的变量和语句中的 where 子句是从上一页传递的。我在各个地方都使用了 echo 来检查值是否正确传递。尽管一切看起来都很好,但代码却无法正常工作。

   <?php
 include 'Millsdbconnection_test.php';
 date_default_timezone_set("Asia/Kolkata");
 session_start();
$var_value = $_POST['dsg'];
$var_value1 = $_SESSION['Heat'];
echo $var_value;
echo $var_value1;
insert_billet($var_value,$var_value1);
function insert_billet($dsg,$HeatId){
include 'Millsdbconnection_test.php';
$dsg2=$dsg;
$HeatId2=$HeatId;
$sql = 'update stg_bil_layer set STEEL_GRADE_ID= :xx where heat_id= :yy';
$query = oci_parse($c,$sql);            
oci_bind_by_name($query, ':xx', $dsg);
oci_bind_by_name($query, ':yy', $HeatId);
            oci_execute($query);
            if (!oci_execute($query) ){
                $errd=oci_error($query);
                trigger_error('Query failed: ' 
      .$errd['message'],E_USER_ERROR);
            }       

                echo 'Here';
                echo $dsg2;
                echo '<br>';
                echo $HeatId2;
                $sql2 = 'update stg_billet set STEEL_GRADE_ID=:aa where 
    heat_id=:bb';
                $query2= oci_parse($c,$sql2);
                oci_bind_by_name($query2, ':aa', $dsg2);
                oci_bind_by_name($query2, ':bb', $HeatId2);
                oci_execute($query2);

                if (!oci_execute($query2) ){
                    $errd=oci_error($query2);
                    trigger_error('Query failed: ' 
      .$errd['message'],E_USER_ERROR);
                }else{
                    echo "<script type='text/javascript'>
                window.onload = function () { alert('Steel Grade Updated 
      !!!!'); }
                    </script>";
                    //echo $count;
                }


 }

 ?>

【问题讨论】:

  • 现在出现哪个错误?请上传错误截图。
  • 我已经发布了我的代码。实际上没有错误,只是第二个更新查询没有给出任何结果。
  • @ravipandey 第一个问题是您要执行每个查询两次。当您检查if (!oci_execute($query) ) 时,您正在执行与前行相同的查询。我会先删除第一个和第二个查询的调用。
  • 但这对我来说一直有效,无论如何第一个查询成功更新了第一个表,问题仅在于第二个查询。

标签: php oracle11g


【解决方案1】:

您可能在您的数据库上启用了“安全更新”选项。这可以防止没有指定主键的行更新。

在 MySQL 和 Oracle(可能更多)中,可以使用以下命令禁用此功能:SET SQL_SAFE_UPDATES = 0;

【讨论】:

  • 很抱歉我之前没有添加我的代码。您可以看到有两个更新查询。第一个成功执行,而第二个没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 2020-01-16
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多