【问题标题】:Unable to pass @varibale from transaction into log无法将 @varibale 从事务传递到日志
【发布时间】:2020-03-20 03:25:11
【问题描述】:

我有这段代码可以做所有事情我只是无法将@new_spec_id 值传递到write_MySQL_log。 当前代码只是将@new_spec_id 写入日志函数。女巫完全奇怪,因为我将 @new_spec_id 值正确传递给其他查询。如果我把它改成 $spec_id 一样的东西。它只是将其写为文本 $spec_id。

我在其他页面上有类似的东西,我可以将 $spec_id 传递到日志中。

mysqli_query($con,"START TRANSACTION");

     $a1 = "SELECT @new_spec_id:=COALESCE(MAX(spec_id),0) FROM SPEC;";
     $query1 = mysqli_query($con, $a1);
     write_mysql_log("Izrađena specifikacija ID: @new_spec_id", $db);

     $a2 = "UPDATE SPEC SET spec_iznos = '$value' WHERE spec_id = @new_spec_id;";
     $query2 = mysqli_query($con, $a2);    

     if ($a1 and $a2) {
         mysqli_query($con,"COMMIT");
     } else {        
         mysqli_query($con,"ROLLBACK");
     };

我试图定义它,但以太不起作用..

     $log = "@new_spec_id";
     write_mysql_log("Izrađena specifikacija ID: $log", $db);

编辑: 使它与另一个 SELECT 一起工作...

$sql = "SELECT MAX(spec_id) AS spec_id FROM SPEC";
     $result = $con->query($sql);
   // output data of each row
     while($row = $result->fetch_assoc()) {
       write_mysql_log("Izrađena specifikacija ID: " . $row["spec_id"], $con);

【问题讨论】:

  • 我花了一段时间才弄清楚你在做什么如果你想写你必须获取结果的 Max id,用户定义的 mysql 变量在 php 中不起作用,但你当然可以做一个 SELECT @new_spec_id;但hwta的用途。
  • 不应该这样工作吗:ID:$query1?不是。
  • 让它在这段代码之外工作......

标签: php mysql transactions


【解决方案1】:

PHP 不能直接访问 SQL 变量。您需要将查询结果提取到 PHP 变量中。

mysqli_query($con,"START TRANSACTION");

$a1 = "SELECT @new_spec_id:=COALESCE(MAX(spec_id),0) AS new_spec_id FROM SPEC;";
$query1 = mysqli_query($con, $a1);
if ($query1) {
    $row = mysqli_fetch_assoc($query1);
    $new_spec_id = $row['new_spec_id'];
    write_mysql_log("Izrađena specifikacija ID: $new_spec_id", $db);

    $a2 = "UPDATE SPEC SET spec_iznos = '$value' WHERE spec_id = @new_spec_id;";
    $query2 = mysqli_query($con, $a2);    
} else {
    $query2 = null;
}

if ($query1 and $query2) {
    mysqli_commit($con);
} else {        
    mysqli_rollback($con);
};

【讨论】:

  • 在您编辑之前或之后都不起作用。但是我已经制作并编辑了我的有效解决方案,因此您不会浪费时间。但感谢您的意见。
  • 您应该发布您的解决方案作为答案。
  • 其实很抱歉,您的解决方案确实有效,我忘了添加 } else { 部分。我会将您的输入标记为正确答案并解释错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 2018-10-11
  • 2018-03-13
  • 2017-12-14
  • 2011-03-20
  • 1970-01-01
相关资源
最近更新 更多