Я попытался удалить пользователя из базы данных mysql с помощью этого кода
if (isset($_POST['user_delete'])) {
$key = $_POST['keyToDelete'];
$check = "DELETE FROM user WHERE id = ". $key or die(mysqli_error($connection));
$result2 = $connection->query($query);
if ($result2->num_rows >0){
$query_delete = "DELETE FROM user WHERE id = ". $key or die(mysqli_error($connection));
var_dump($query_delete);
} else {
}
но он не хочет удалять мою базу данных. но sql уже правильный, и я также получил идентификатор, потому что пытался его var_dump. пожалуйста, помогите, что не так с моим кодом
Вы никогда не выполняете второй запрос (который совпадает с первым?). Вы также die() к строке запроса, а не к выполнению запроса.
"Я попытался удалить базу данных от mysql.", наверное?
да, это то, что я имею в виду. Прости






У вас есть несколько проблем здесь,
Ваш or die(mysqli_error($connection)) относится к строкам запросов, а не к фактическим запросам. Кроме того, вместо того, чтобы вручную проверять ошибки, гораздо лучше настроить автоматическую выдачу ошибок. Для этого добавьте в код подключения следующую строку:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Вы пытаетесь удалить его дважды? Хотя второй запрос никогда не выполняется, вы просто определяете строку запроса (и никогда не запускаете ее).
num_rows можно использовать только в операторах select. Вы хотите affected_rows проверить, действительно ли запрос удалил какие-либо данные.if (isset($_POST['user_delete'])) {
$key = $_POST['keyToDelete'];
$query = "DELETE FROM user WHERE id = ?";
$stmt = $connection->prepare($query);
$stmt->bind_param("s", $key);
$stmt->execute();
if ($stmt->affected_rows) {
echo "Deleted ".$stmt->affected_rows." rows";
} else {
echo "No rows matched the criteria.";
}
$stmt->close();
}
нехорошо жестко кодировать сообщения об ошибках в коде приложения. Позвольте мне отредактировать ваш код с правильным сообщением об ошибках?
Также совершенно неожиданно, но (3) неверно, эти функции взаимозаменяемы
Обработка ошибок была просто примером (и чтобы подтолкнуть в направлении «не отображать ошибки конечному пользователю») — не стесняйтесь улучшать ее.. Я никогда не видел, чтобы num_rows работал над запросами на удаление? Насколько я помню, в руководстве об этом не упоминается - у вас есть источник для этого?
Плохо, работает только наоборот, Для операторов SELECT mysqli_affected_rows() работает как mysqli_num_rows().
Итак, вот мой взгляд на сообщения об ошибках. во-первых, это делает код менее раздутым. Во-вторых, это делает отчеты об ошибках более гибкими, поскольку их можно настроить на уровне приложения.
Я попытался использовать этот пример заявления. у него нет ошибки, но он все еще не удаляет данные в базе данных. поэтому я попытался изменить "?" оператор с «$ key», но он все еще не удаляет данные
Если бы вы добавили mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); вверху, как это было предложено YCS, вы бы увидели любые потенциальные ошибки. Не заменяйте ?, это ограниченный заполнитель, вы привязываете его к $key в bind_param(). Какое из двух утверждений echo напечатано?
Я беру этот keyToDelete из модального окна после того, как я беру кнопку user_delete from до того, как появится модальное окно.
он напечатал удаленные -1 строки
Таким образом, запрос возвращает ошибку. Включите исключения в MySQLi, добавив mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); вверху вашего кода, тогда вы увидите ошибку.
о, я получил сообщение об ошибке: «Uncaught mysqli_sql_exception: невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не работает (db_survey.mitra, CONSTRAINT mitra_ibfk_1 FOREIGN KEY (id_user) REFERENCES user (id))», так это значит, что это возможно? не удалить?
Это означает, что в таблице mitra есть значения, которые зависят от значений, которые вы пытаетесь удалить. Итак, либо сначала удалите их, либо вы можете изменить свой внешний ключ на ON DELETE CASCADE (чтобы он удалял строки в mitra при удалении пользователя). В качестве альтернативы ON DELETE SET NULL, если это возможно.
Ну, это не удалит всю базу данных, возможно, удалит только пользователя. Что вы на самом деле пытаетесь сделать?