Не могу удалить базу данных mysql с php

Я попытался удалить пользователя из базы данных 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. пожалуйста, помогите, что не так с моим кодом

Ну, это не удалит всю базу данных, возможно, удалит только пользователя. Что вы на самом деле пытаетесь сделать?

Caius Jard 02.07.2019 11:16

Вы никогда не выполняете второй запрос (который совпадает с первым?). Вы также die() к строке запроса, а не к выполнению запроса.

Qirel 02.07.2019 11:17

"Я попытался удалить базу данных от mysql.", наверное?

Kévin Bibollet 02.07.2019 11:19

да, это то, что я имею в виду. Прости

Q With Only 02.07.2019 13:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
118
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть несколько проблем здесь,

  1. Ваш or die(mysqli_error($connection)) относится к строкам запросов, а не к фактическим запросам. Кроме того, вместо того, чтобы вручную проверять ошибки, гораздо лучше настроить автоматическую выдачу ошибок. Для этого добавьте в код подключения следующую строку:

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  2. Вы пытаетесь удалить его дважды? Хотя второй запрос никогда не выполняется, вы просто определяете строку запроса (и никогда не запускаете ее).

  3. num_rows можно использовать только в операторах select. Вы хотите affected_rows проверить, действительно ли запрос удалил какие-либо данные.
  4. Вы не используете подготовленный оператор.
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();
}

нехорошо жестко кодировать сообщения об ошибках в коде приложения. Позвольте мне отредактировать ваш код с правильным сообщением об ошибках?

Your Common Sense 02.07.2019 11:30

Также совершенно неожиданно, но (3) неверно, эти функции взаимозаменяемы

Your Common Sense 02.07.2019 11:30

Обработка ошибок была просто примером (и чтобы подтолкнуть в направлении «не отображать ошибки конечному пользователю») — не стесняйтесь улучшать ее.. Я никогда не видел, чтобы num_rows работал над запросами на удаление? Насколько я помню, в руководстве об этом не упоминается - у вас есть источник для этого?

Qirel 02.07.2019 11:32

Плохо, работает только наоборот, Для операторов SELECT mysqli_affected_rows() работает как mysqli_num_rows().

Your Common Sense 02.07.2019 12:09

Итак, вот мой взгляд на сообщения об ошибках. во-первых, это делает код менее раздутым. Во-вторых, это делает отчеты об ошибках более гибкими, поскольку их можно настроить на уровне приложения.

Your Common Sense 02.07.2019 12:15

Я попытался использовать этот пример заявления. у него нет ошибки, но он все еще не удаляет данные в базе данных. поэтому я попытался изменить "?" оператор с «$ key», но он все еще не удаляет данные

Q With Only 02.07.2019 13:56

Если бы вы добавили mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); вверху, как это было предложено YCS, вы бы увидели любые потенциальные ошибки. Не заменяйте ?, это ограниченный заполнитель, вы привязываете его к $key в bind_param(). Какое из двух утверждений echo напечатано?

Qirel 02.07.2019 13:59

Я беру этот keyToDelete из модального окна после того, как я беру кнопку user_delete from до того, как появится модальное окно.

Q With Only 02.07.2019 13:59

он напечатал удаленные -1 строки

Q With Only 02.07.2019 14:00

Таким образом, запрос возвращает ошибку. Включите исключения в MySQLi, добавив mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); вверху вашего кода, тогда вы увидите ошибку.

Qirel 02.07.2019 14:02

о, я получил сообщение об ошибке: «Uncaught mysqli_sql_exception: невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не работает (db_survey.mitra, CONSTRAINT mitra_ibfk_1 FOREIGN KEY (id_user) REFERENCES user (id))», так это значит, что это возможно? не удалить?

Q With Only 02.07.2019 14:30

Это означает, что в таблице mitra есть значения, которые зависят от значений, которые вы пытаетесь удалить. Итак, либо сначала удалите их, либо вы можете изменить свой внешний ключ на ON DELETE CASCADE (чтобы он удалял строки в mitra при удалении пользователя). В качестве альтернативы ON DELETE SET NULL, если это возможно.

Qirel 02.07.2019 14:32

Другие вопросы по теме