Инструкция PHP PDO If для проверки, пусто ли поле в инструкции delete

#php #mysql #pdo

#php #mysql #pdo

Вопрос:

Прошу прощения, если об этом спрашивали раньше, но я не нашел ответа, который соответствует моим потребностям.

У меня есть подготовленная инструкция для удаления данных из таблицы с использованием пользовательского ввода:

     $delete = $handler->prepare("DELETE FROM screenings WHERE 
       time = :time    ORDER BY screeningid LIMIT 1; ");
 $delete- >execute(array( ':time' => $screeningtime  )); 
  

Я пытаюсь добавить инструкцию if перед инструкцией delete, чтобы сначала проверить, завершается ли запись, и если это так, выполняет инструкцию delete, в противном случае выдает сообщение об ошибке.

до сих пор я пробовал:

 if(empty($row['column'])) {
 echo "error";
}else {
 //delete statement here
} 
  

но безрезультатно, сообщение об ошибке выводится во всех экземплярах

Комментарии:

1. Что такое $row ?

2. @PaulSpiegel Я внезапно понятия не имею, это был долгий день, я думаю, я пытался использовать $ screeningtime как $ row

Ответ №1:

Вам нужно будет выполнить SELECT, чтобы определить, существует ли строка.

Однако результат УДАЛЕНИЯ вернет количество затронутых строк, поэтому вы можете просто запустить его независимо, а затем проверить, были ли удалены 0, 1 или > 1 строки. Это было бы $delete->rowCount()

http://php.net/manual/en/pdostatement.rowcount.php

Комментарии:

1. Итак, могу ли я выполнить инструкцию delete, затем: ` if ($delete-> rowCount() > 0) { echo «Успех»; } else { echo «Сбой»; } `

2. Я добавил это ниже моей инструкции delete, однако, когда я тестирую результат, всегда «сбой»

3. @Raznok чтобы помочь в дальнейшем, я предлагаю вам обновить свой пост текущей версией кода, значением, которое вы передаете для $screeningtime , и некоторыми примерами строк из таблицы, по крайней мере, одна из которых должна соответствовать $screeningtime

Ответ №2:

      <? Php
      $delete->execute();
    if ($delete->rowCount() >= 1)
        echo 'ok';
    else
        echo 'error or not found';
  

Комментарии:

1. Чтобы уточнить, используя мой приведенный выше пример, я мог бы использовать ` $delete is_removed = $delete-> выполнить`?

2. @Raznok да. Вы можете

3. execute возвращает True при успешном выполнении, но это не будет означать, что что-либо было удалено, просто означает, что в самом запросе не было ошибок и он был выполнен на сервере БД. Если были выданы ошибки, то это вернет False