为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信