簡體   English   中英

在php中運行mysqli更新查詢,如果沒有,則返回更新

[英]running a mysqli update query in php and it returns that it updated when it doesnt

所以發生了什么事,當我提交頁面時,它應該注冊一個用戶已經提交了一個希望,然后將其更新為他們剛剛提交的新希望,而不是創建一個新希望,但是運行時,它返回已成功更新的希望。如果沒有,關於如何進行更改以使其正常運行的任何想法?

我已經檢查出它通過回顯從服務器中檢索到的Hope和HopeId來獲取運行更新查詢所需的所有信息,並且它們正確地輸出了。 然后,我直接在mysql工作台中使用返回的hope和hopeId運行更新查詢,它成功更新了該行。 因此,我認為在MySQLDAO中編寫語句時犯了一個錯誤。

這是我的代碼,共有幾頁,因此我抓取了所有我認為相關的代碼並分別標記了它們(如果您需要其他任何代碼,請大喊大叫,請盡快將其添加為編輯內容):

這是TodaysHope.php

$dao = new MySQLDAO($dbhost, $dbuser, $dbpassword, $dbname);
$dao->openConnection();

$userHope = $dao->getHope($userId);

if(!empty($userHope))
{
    $hopeId=$userHope["hopeId"];

    $updateResult =$dao->updateTodaysHope($hopeId, $hope);

    if ($updateResult)
    {
        $returnValue["status"]="200";
        $returnValue["message"]="Hope updated";
        $returnValue["hope"]=$hope;
    } else {
        $returnValue["status"]="400";
        $returnValue["message"]="A problem has occured";
    }

} else  {

    $result =$dao->saveTodaysHope($userId, $hope);

    if ($result)
    {
        $returnValue["status"]="200";
        $returnValue["message"]="Hope submitted";  
    } else {
        $returnValue["status"]="400";
        $returnValue["message"]="A problem has occured";
    }

}

這是MySQLDAO.php

public function saveTodaysHope($userId, $hope) 
    {
        $sql = "insert into todaysHope set userId=?, hope=?";
        $statement = $this->conn->prepare($sql);

        if (!statement)
            throw new Exception ($statement->error);

        $statement->bind_param("is", $userId, $hope);
        $returnValue = $statement->execute();

        return $returnValue;

}

public function updateTodaysHope($hope, $hopeId) 
    {
        $sql = "update todaysHope set hope=? where hopeId=?";
        $statement = $this->conn->prepare($sql);

        if (!statement)
            throw new Exception ($statement->error);

        $statement->bind_param("si", $hope, $hopeId);
        $returnValue = $statement->execute();

        return $returnValue;

}

抱歉,如果我真的很想念這件事,但是我一直試圖讓這部分代碼工作幾天,並且想不出其他辦法。 感謝您的幫助。

看來您是錯誤地將變量傳遞給函數:

$updateResult =$dao->updateTodaysHope($hopeId, $hope);

public function updateTodaysHope($hope, $hopeId)

您在$ statement變量中缺少$ 在兩個測試中將此if (!statement)更改為if (!$statement)

如果MySQLDAO是PDO的子類,則$ statement-> execute()將返回一個布爾值。 可以通過$ statement-> rowCount()檢索受影響的行數。

http://php.net/manual/zh/pdostatement.execute.php

http://php.net/manual/en/pdostatement.rowcount.php


對於mysqli來說,它是完全相同的,execute()返回的只是布爾值,但是那不是一個方法,而是一個獲取受影響行的屬性-將是$statement->affected_rows

http://php.net/manual/en/mysqli-stmt.execute.php

http://php.net/manual/en/mysqli-stmt.affected-rows.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM