我正在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);