我正在尝试使用 jQuery Ajax 删除 PHP 帖子,但由于某种原因我遇到了 2 种不同类型的错误。
控制台.log显示以下内容:
警告 PDO::p repare() 期望参数 1 为字符串,对象在第 41 行的 ajax_functions.php 中给出
致命错误未捕获错误:在 ajax_functions.php:43 中调用 bool 上的成员函数 execute()
有谁知道是什么原因造成的?
脚本
.JS$('.post-remove-btn').on('click', function(e) {
e.preventDefault();
var entered_name = $('.name-input').val();
$.ajax({
method: "POST",
url: 'functions/ajax_functions.php',
data: { table1: table, tableNr1: tableNr, 'action': 'remove' },
success: function(data) {
if(data){
console.log(data);
}else{
alert('error');
}
},
error: function(requestObject, error, errorThrow) {
alert('error');
}
});
});
AJAX_FUNCTIONS。.PHP
<?php
include("../database.php");
// AJAX
if( isset($_POST['action']) ) {
if($_POST['action'] == 'remove'){
$table1 = $_POST['table1'];
$tableNr1 = $_POST['tableNr1'];
if($table1 == 'post'){
$sql = $pdo->query('DELETE FROM posts WHERE id = ' . $tableNr1);
$stmt2 = $pdo->prepare($sql); // PDO::prepare() expects parameter 1 to be string
$result = $stmt2->execute(); // Uncaught Error: Call to a member function execute() on bool
if($result==true){
echo 'post deleted';
}
}elseif ($table1 == 'thread') {
echo 'thread';
}
}
}
?>
您已经使用$pdo->query(...)
执行了查询。你不能使用结果作为参数来$pdo->prepare()
- 这应该将SQL字符串作为参数。
您应该只使用prepare()
,并使用参数来防止 SQL 注入。
if($table1 == 'post'){
$stmt2 = $pdo->prepare('DELETE FROM posts WHERE id = :number');
$result = $stmt2->execute([':number' => $tableNr1]);
if($result){
echo 'post deleted';
}
} elseif ($table1 == 'thread') {
echo 'thread';
}