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

时间:2016-01-18 21:30:32

标签: php mysqli

我有一个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,因此它不会选择任何行。

1 个答案:

答案 0 :(得分:1)

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

根据mysqli documentation你必须:

  

注意:使用mysqli_stmt_execute()时,mysqli_stmt_fetch()   必须使用函数在执行任何数据之前获取数据   其他疑问。

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

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

我不确定你的意思&#34;它会先运行&#34;。