MySQL:DELETE NOT IN带有POST值,PDO Prepare删除所有记录



我有一个包含user_id和user_hash的简单表。

所有的散列都需要通过AJAX调用删除,除了一些散列。需要保留的散列通过POST变量发送。

HTML代码

<button data-hash="'M3FYck9KemhVSk5iYW9YcFpSTExMQT09', 'eTlSQ0NMSW1PT2NLOTNaUHlPWEtKQT09'" class="purge">Purge</button>

JQuery代码

$('.purge').on('click', function (e) {
e.preventDefault();
hash = $(this).attr('data-hash');
$.ajax({
url: "includes/db.php",
type: "POST",
data: { type: 'purge', hash: hash },
success: function () {
}
});
});

db.PHP的PHP代码

elseif ($_POST["type"] == 'purge') {
$stmt = $conn->prepare("DELETE FROM users_hash WHERE hash NOT IN (:hash)");
$arr_update = array('hash' => $_POST["hash"]);
$stmt->execute($arr_update);
}

但是这次删除了所有用户的记录_hash!

但是,如果我在db.php文件中添加此代码

echo "DELETE FROM users_hash WHERE hash NOT IN (".$_POST["hash"].")";

这显示在Chrome Devtools 中

DELETE 
FROM users_hash 
WHERE hash NOT IN ('M3FYck9KemhVSk5iYW9YcFpSTExMQT09',
'eTlSQ0NMSW1PT2NLOTNaUHlPWEtKQT09')

其如预期的那样工作。

用PDO准备查询会改变一些事情,但我不知道是什么。

PDO将您的列表作为一个文本发送,即作为

DELETE 
FROM users_hash 
WHERE hash NOT IN ('M3FYck9KemhVSk5iYW9YcFpSTExMQT09, eTlSQ0NMSW1PT2NLOTNaUHlPWEtKQT09')

使用NOT FIND_IN_SET:

$stmt = $conn->prepare("DELETE FROM users_hash WHERE NOT FIND_IN_SET(hash, :hash)");

最新更新