【问题标题】:Second prepared statement is not firing第二个准备好的语句没有触发
【发布时间】:2014-02-27 19:19:16
【问题描述】:

感谢您的宝贵时间。

下面我有两个准备好的语句,query & query2;

con 是连接变量

第一个查询运行良好,正在更新数据库。

第二个查询没有更新任何内容,尽管它没有给出任何错误。

当我查看“成功”运行后记录的第二个查询时,插入的变量看起来像一个空字符串。即RESTI=''

为什么会这样?我的代码是否以正确的顺序运行第二个查询?

$row = 1;
$con=mysqli_connect("connect info");

if (mysqli_connect_errno())
{
   //echo "Failed to connect to MySQL Error 1: " . mysqli_connect_error();
   //error reporting done here
}
else
{
    $con->autocommit(false);
    $query = $con->prepare("UPDATE table where `INDEX`=?");
    $query2 = $con->prepare("UPDATE table2 where (SELECT column from table where`RESTI`=?)");

    $query->bind_param('i', $row);
    $query2->bind_param('i', $row);

    if($query->execute() == false)
    {
        //Failed!
        /ERROR HANDLING
    }
    else
    {
       //SUCCESS            
    }

    if($query2->execute() == false)
    {
        //Failed!
        /ERROR HANDLING
    }
    else
    {
        //Success       
    }
    $con->commit();
    $query->close();
    $query->close();
}

mysqli_close($con);

【问题讨论】:

  • 所以我,这两个查询都没有意义 - 两者都没有更新任何东西
  • 您如何看待更新数据库的第一个查询?另请注意,您不是关闭 query2,而是关闭第一个查询两次。这正是您的代码吗?

标签: php mysql sql prepared-statement prepare


【解决方案1】:

你的更新语句应该是这样的:

"UPDATE table SET column=<new value to set> WHERE INDEX=?"
"UPDATE table2 SET <col to update>= (SELECT column from table where`RESTI`=?) WHERE condition

确保 RESTI 是唯一字段,并且子查询只会返回标量值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多