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