这是错误还是编码错误?

Is this a bug or a coding error?

我正在处理页面 [events],它正在做最奇怪的事情。我正在尝试创建一个删除函数,它将字段名称(已删除)设置为 1。这意味着数据没有完全丢失,get-events ajax 页面获取 deleted = 0 的事件。

但是,当您单击该按钮时,它会显示一条成功消息,但不会删除。我已经在 SQLyog 中测试了 SQL 语句,以确保我的 SQL 是正确的。我检查了 PHP 错误日志并且没有错误.. 一切都匹配并且它应该可以正常工作,如果我将我的 SQL 语句从:

UPDATE events SET deleted = 1 WHERE eventid = :eventid

至:

UPDATE 1events SET deleted = 1 WHERE eventid = :eventid

然后它弹出一个错误,所以正在读取所有内容..它只是没有这样做..

这是我的 class 结构:

Class Events{
    public function __construct($EventId = null, $Array = null) {
        if (isset($EventId)) {

            $database = new Connection();
            $database = $database->Connect();

            $statement = $database->Prepare("SELECT * FROM events WHERE EventId = :EventId");
            $statement->execute(array("EventId" => $EventId));
            $Array = $statement->fetch(PDO::FETCH_ASSOC);

        }

        if (isset($Array)) {
            foreach ($Array as $Key => $Value) {
                $this->$Key = $Value;
            }
        }
    }

这是我的删除函数:

public function DeleteEvent() {
    try {
        $database = new Connection();
        $database = $database->Connect();

        $statement = $database->Prepare("UPDATE events SET deleted = 1 WHERE EventId = :EventId");
        $statement->execute(array("EventId" => $this->EventId ));
        $this->Success = 1;
        $this->Message = 'Event Deleted';

    } catch (PDOException $e) {
        $this->Success = 0;
        $this->Message = "Error!: " . $e->getMessage();
    }
}

我删除ajax:

<?php
include $_SERVER['DOCUMENT_ROOT'].'/includes/galaxy-connect.php';

  $a_json = array();
  $a_json_row = array();

  if (empty($_POST['EventId'])) {
    $a_json_row["success"] = 0;
    $a_json_row["message"] = 'Something Went Wrong';
  } else {
    $Event = new Events($_POST['EventId']);
    $Event->DeleteEvent($_POST);

    $a_json_row["success"] = $Event->Success;
    $a_json_row["message"] = $Event->Message;

  }

  array_push($a_json, $a_json_row);
  echo json_encode($a_json);

我的代码有什么问题吗?或者这是一个奇怪的错误?

您正在调用构造函数

  $Event = new Events($_POST['EventId']);

并调用方法

  $Event->DeleteEvent($_POST);

但是方法

 public function DeleteEvent() {
      try {
        ....

指的是$this->EventId

您的构造函数未填充 $this->EventId 或您的方法未正确获取一个参数 $_POST(或两者都...)

事件的构造函数class至少应该像

class Events {

   public function __construct($id) {
       ....

          $this->EventId = $id;

答案很简单!当我想要一个对象时,我将数据作为数组传递!

如果有人遇到类似问题并发现它,请仔细检查您的代码将数据转换为对象,而不是数组:-)