如何在一个 php 函数中使用 mysqli 运行两个查询


How to run two query by using mysqli in one php function

我有一个php函数,它有两个来自同一个表的查询。第一个查询选择一些行,第二个查询必须在一列中选择后更新所选行。但不幸的是,只有第一个查询被执行,我无法更新表。

这是我的函数代码:

public function displayNewMessage(){
    include "connection.php";
    // first query
    $displayMsg = $connection->prepare("select date, senderUserName, message from messages where showed = 0 and
    ((senderUserName = ? and receiverUserName = ?) or (senderUserName = ? and receiverUserName = ?))
     order by date desc");
    // second query
    $checkMsg = $connection->prepare("UPDATE messages SET showed = 1 where showed = 0 and
    ((senderUserName = ? and receiverUserName = ?) or (senderUserName = ? and receiverUserName = ?))");

    // preparation for both query is same
    $displayMsg->bind_param("ssss", $senderUserName, $receiverUserName, $receiverUserName, $senderUserName);
    $senderUserName=$this->getSenderUserName();
    $receiverUserName=$this->getReceiverUserName();
    $displayMsg->execute(); // execute first query
    $checkMsg->execute();   // execute second query
    $displayMsg->store_result();
    $displayMsg->bind_result($messageDate, $senderUserName, $message);
    while($displayMsg->fetch()){
        $this->setSenderUserName($senderUserName);
        $this->setMessage($message); 
        $this->setMessageDate($messageDate);
        ?>
        <span style="color:#00F"> <?php echo $this->getSenderUserName(); ?></span>&nbsp; says: <br />
        <?php echo $this->getMessage(); ?>
        <div class="date"><?php echo $this->getMessageDate(); ?></div><br />
        <?php
    }
    $displayMsg->free_result();
}

如果我在函数结束时执行第二个查询,它将首先运行并导致第一个查询的条件计算为 false,因此它不会选择任何行。

根据您的问题,但不幸的是,只执行了第一个查询,我无法更新表。

根据 mysqli 文档,您必须:

注意:使用 mysqli_stmt_execute() 时,mysqli_stmt_fetch() 在执行任何 其他查询。

你在 fetch 循环之前调用第二个执行;这是不允许的。


至于:如果我在函数结束时执行第二个查询,它将首先运行并导致第一个查询的条件计算为 false,因此它不会选择任何行。

我不确定你说的"它会先运行"是什么意思。