PHP MySql запрос на удаление строк не работает - PullRequest
0 голосов
/ 17 октября 2010

У меня есть PHP-скрипт:

foreach (get_all_topics () as $topic_id => $topic_info) {
   $result = mysql_query("DELETE FROM marks 
                           WHERE user_id = $user_id 
                            AND topic_id = $topic_id", $db);
    echo "DELETE FROM marks 
           WHERE user_id = $user_id 
             AND topic_id = $topic_id : " . mysql_error() . " : " . mysql_affected_rows();
}

Я установил допустимое значение $user_id, а get_all_topics() выдает действительную информацию о теме, напечатанную echo. Однако он всегда возвращает false, и у меня есть данные с user_id = 1 AND topic_id = 1 (и он также удаляется, если я копирую и вставляю строку echo ed в интерактивную подсказку mysql - поэтому никаких орфографических ошибок!)

ПРИМЕЧАНИЕ: Другие функции, которые вставляют или обновляют таблицу, работают просто отлично. Я изучаю php - mysql, и это первый раз, когда я удаляю что-то из базы данных. Кто-нибудь может подсказать, в чем проблема с этим скриптом? Или с этим может быть какая-то проблема с разрешениями?

Ответы [ 4 ]

1 голос
/ 17 октября 2010
  1. Удалить все эти строки один раз, используя in (id1, id2, id3)
  2. Вы не указали базу данных в запросе (возможно, вы выбрали базу данных ранее) - используйте databasename. tablename.
  3. Это зависит от того, что возвратил ваш mysql_error, поскольку false означает, что произошла ошибка.
  4. Возможно, ошибки как-то приостановлены, поэтому просмотрите журналы ошибок.

Страница справки PHP Mysql Query

1 голос
/ 17 октября 2010

Попробуйте поместить одинарные кавычки в $ user_id и $ topic_id, чтобы ваш код был

mysql_query( "DELETE FROM marks WHERE user_id='$user_id' AND topic_id='$topic_id'", $db );
0 голосов
/ 11 июля 2015

ОП написал:

Я изменил код выше на

$all_topics = get_all_topics();

foreach ($all_topics as $topic_id => $topic_info) {
   $result = mysql_query("DELETE FROM marks 
                           WHERE user_id = $user_id 
                            AND topic_id = $topic_id", $db);
    echo "DELETE FROM marks 
           WHERE user_id = $user_id 
             AND topic_id = $topic_id : " . mysql_error() . " : " . mysql_affected_rows();
}

и это сработало! Любой, у кого возникла подобная проблема, может попытаться присвоить возвращаемое значение некоторой временной переменной, а затем использовать это в цикле foreach. Не знаю, почему это работает.

0 голосов
/ 17 октября 2010

Мне нравится создавать строку запроса:

$myQuery = "DELETE FROM marks WHERE user_id= " . $user_id . "AND topic_id=" . $topic_id;
mysql_query($myQuery);
...