php错误

lfapxunr  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(339)

我最近在youtube上关注了mmtuts在php-oop上的一个教程播放列表,但是他使用了pdo,我没有,当我尝试在我的项目中实现代码时,我遇到了一个错误。
我的代码:

//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方法给出了消息“failed to delete article”。即使这篇文章已被删除。

jdg4fx2g

jdg4fx2g1#

这段代码在很多方面都是错误的(正如您在youtube教程中所期望的那样),但主要的问题是showdeletearticle()方法是错误的,并且具有误导性。
完全没有理由使用这种方法。事实证明,另一个答案是可以接受的。提供的代码总是返回一个true-like值,因此showdeletearticle()中的条件变得无用。你可以把它改写成

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

因为它永远不会进入其他部分。
更不用说任何控制器都不应该直接脱口而出任何数据,而不是通过视图。至少在post请求之后,之后必须有一个重定向,而不是输出。

mtb9vblg

mtb9vblg2#

错误是返回$result,这仅在使用select语句时有效。但是在insert、update、delete中不需要$result,$result不是布尔值,这就是为什么它在if语句中不起作用的原因。您应该返回$stmt because,并在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.

相关问题