2016-01-18 29 views
0

我有一個php函數,它有兩個來自同一個表的查詢。 第一個查詢選擇一些行,第二個查詢必須在一列中選擇後更新選定的行。但不幸的是只有第一個查詢是執行,我不能更新表。如何在一個php函數中使用mysqli運行兩個查詢

這是我的功能代碼:

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(); 
} 

,如果我在函數結束時執行第二查詢,將首先運行,並導致第一次查詢的條件評估爲假,所以它不會選擇任何行。

+0

嗨,如果您將答案標記爲已接受,對社區有幫助。如果答案中沒有答案解決了您的問題,並且您有解決方案,那麼您應該能夠回答自己的問題,並在詢問後48小時後接受該答案。 –

回答

1

根據您的問題,但不幸的是只有第一個查詢是執行,我不能更新表。

根據mysqli documentation必須:

注意:當使用mysqli_stmt_execute()時,mysqli_stmt_fetch() 函數必須用來獲取之前執行任何 其他查詢中的數據。

您正在調用循環前的第二個執行;這是不允許的。


至於:如果我在它會首先運行,並導致第一次查詢的條件評估爲假的函數結束執行第二查詢,所以它不會選擇任何行。

我不確定您的意思是「它會先運行」。

+0

謝謝我認爲我發現了這個問題 – AliDK

相關問題