亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 OOP 準備語句的 PHP 錯誤

使用 OOP 準備語句的 PHP 錯誤

PHP
慕俠2389804 2023-05-26 14:23:43
當我嘗試在我的項目中實現代碼時出現錯誤。我的代碼://In file with class 'Article'.public function deleteArticle($id) {? ? ?$conn = $this->connect();? ? ?$sql = "UPDATE article SET deleted=1 WHERE row_id=?";? ? ?$stmt = $conn->prepare($sql);? ? ?$stmt->bind_param("i", $id);? ? ?$stmt->execute();? ? ?$result = $stmt->get_result();? ? ?return $result;}//In file with class 'DBConn'.public function connect() {? ?$conn = new mysqli('localhost', 'root', '','nicms');? ?if ($conn->connect_error) {? ? ? die("Connection failed: " . $conn->connect_error);? ?}? ?return $conn;}//In file with class 'articleContr'.public function showDeleteArticle($id) {? ?if ($this->deleteArticle($id)? ? ? ?echo "Article has successfully been deleted.";? ?else?? ? ?echo "Failed to delete article.";}錯誤是文章確實被刪除了,但是 showDeleteArticle 方法給出了消息“無法刪除文章”。盡管文章已被刪除。
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

錯誤是您返回一個 $result,這僅在使用 select 語句時有效。但是在插入、更新、刪除時不需要 $result,$result 不是布爾值,這就是它在 if 語句中不起作用的原因。您應該返回 $stmt 因為并在 if 語句中檢查


將您的代碼更改為此,它應該可以工作:


    protected function unSetArticle($id) {

        $conn = $this->connect();

        $sql = "UPDATE article SET deleted=1 WHERE row_id=?";

        $stmt = $conn->prepare($sql);

        $stmt->bind_param("i", $id);

        $stmt->execute();

        return $stmt;

    }//Method unSetArticle.


查看完整回答
反對 回復 2023-05-26
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

這段代碼在很多層面上都是錯誤的,但主要問題是方法 showDeleteArticle() 是錯誤的并且具有誤導性。

這種方法根本沒有理由。另一個答案被接受的事實證明了這一點。提供的代碼總是返回類似true的值,因此 showDeleteArticle() 中的條件變得無用。可以將其重寫為

public?function?showDeleteArticle($id)?{
????echo?"Article?has?successfully?been?deleted.";
}

因為它永遠不會進入 else 部分。

更不用說任何控制器都不應該直接脫口而出任何數據,而不是通過視圖。至少在 POST 請求之后必須有重定向,而不是輸出。


查看完整回答
反對 回復 2023-05-26
  • 2 回答
  • 0 關注
  • 165 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號