php/mysqli删除函数已被访问,但不会删除该项


php/mysqli delete functions is accesed but it doesnt delete the item

我正在php中为mysqli制作一个oop-delete函数。函数已执行,但不会删除给定的项。

这是我的代码:

PHP(Mysqli类)

  class mysqli_Functions
  {
        private $conn;
        function __construct()
        {
            $this->conn = mysqli_connect("localhost","root","usbw");
            if (!$this->conn) {
                echo "Cannot connect to server";
                exit();
            }
            $db = mysqli_select_db($this->conn,"geweldig");

            if (!$db) {
                echo "Cannot select database";
                exit();
            }
        }

        public function selectAll($tablename)
        {
            return mysqli_query($this->conn,"SELECT * FROM ".$tableName);
        }
        public function select()
        {
        }
        public function update()
        {
        }
        public function delete($query, $realEscape = false)
        {
          if(!empty($realEscape)){
            $what = mysqli_real_escape_string($this->conn, $realEscape);
            $q = $query .' '. $realEscape;
            return mysqli_query($this->conn, $q);
          }
          else{
            return mysqli_query($this->conn, $query);
          }
        }
    }

PHP(调用函数的位置)

<?php
   $mysqli_Functions::delete("DELETE FROM modules WHERE id=" , $_POST['id']);
?>

Ajax代码(触发事件)

$.ajax({
          type: 'post',
          url: 'actions/module-delete.php',
          data: {'id': id}
        });
        // Reload
        setTimeout(function(){
          location.reload();
        }, 2000);
  }

所以在上面的代码中,我试图删除带有id的项目。id在一个按钮中,所以这就是我们使用AJAX的原因。

有人能解释一下为什么上面的代码没有通过id 删除项目吗

$mysqli_Functions::delete()看起来像是在静态调用delete(),但我不确定,因为您使用$mysqli_Functions而不是类名,所以:

  • 没有$this,因为它不是对象
  • 无论如何都不会调用__construct()

你应该试试:

$db = new mysqli_Functions();
$db->delete("DELETE FROM modules WHERE id=" , $_POST['id']);

注意->而不是::

为什么将方法作为静态调用?你应该把它称为公共的,像这样的:

$id = $_POST["id"];
$query = "DELETE FROM modules WHERE id = {$id}";
$mysqli = new mysqli_Functions();
$mysqli->delete($query, $id);