Следующий код не работает, хотя я его протестировал, поставив его на странице. Чтобы сделать это ясно сразу после этого запроса, я делаю запрос select, чтобы отобразить всех пользователей в БД.
$db->query("DELETE FROM Projet_Client WHERE username = '$_GET[d]'");
echo "<div class='alert alert-success text-middle'><strong>Succès</strong>, le
client a été supprimé.</div>";
Вот "эхо" запроса, чтобы показать вам, как он выглядит:
DELETE FROM Projet_Client
WHERE
username = 'a75ea99ce47306ec259d4c905bb9c3f762a531ee'
(Я использую свой sql). Спасибо.
Я изменил код, и он выглядит так:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
try {
$stmt = $db->prepare('DELETE FROM Projet_Client WHERE username= :username');
$stmt->bindParam(':username', $_GET['d']);
$stmt->execute();
} catch(Exception $e){
echo 'Exception -> ';
var_dump($e->getMessage());
}
Однако никакое исключение не бросается.
Проблема решена. Мне пришлось изменить ограничение с помощью внешнего ключа: ON DELETE = CASCADE
Вы уверены, что запрос выполняется правильно? Ваш запрос выглядит хорошо для меня.
Возможно, вы можете попытаться повторить ошибку (если она есть), используя это:
if ($conn->query($sql) !== false) {
echo "Record deleted successfully";} else {
echo "Error deleting record: " . $conn->error;
}
PDOStatement
случае успеха, не true
Вам нужно будет использовать $conn->query($sql) !== false
.
$_GET[d]
недействителен? это должно быть$_GET['d']
или$_GET["d"]
. Как уже упоминал Доминик, вы должны использовать подготовленные заявления, чтобы сделать это.