我有一个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> says: <br />
<?php echo $this->getMessage(); ?>
<div class="date"><?php echo $this->getMessageDate(); ?></div><br />
<?php
}
$displayMsg->free_result();
}
如果我在函数结束时执行第二个查询,它将首先运行并导致第一个查询的条件计算为false,因此它不会选择任何行。
答案 0 :(得分:1)
根据您的问题但不幸的是,只有第一个查询才会执行,我无法更新该表。。
根据mysqli documentation你必须:
注意:使用mysqli_stmt_execute()时,mysqli_stmt_fetch() 必须使用函数在执行任何数据之前获取数据 其他疑问。
你在fetch循环之前调用第二个执行;这是不允许的。
至于:如果我在函数结束时执行第二个查询,它将首先运行并导致第一个查询的条件计算为false,因此它不会选择任何行。
我不确定你的意思&#34;它会先运行&#34;。