2017-01-20 12 views
-1

В таблице книг некоторые строки могут не иметь полных данных. Однако администратор может редактировать строки. В этом случае администратор обновляет строку, добавляя год публикации, где ее не было (year_pub был вставлен пустым).PHP/MySQL/PDO - не удалось ОБНОВИТЬ Значения по умолчанию или нулевые значения

MySQL/PDO UPDATE на этом INT(4) столбец не работает по какой-либо причине.

Поле year_pub не является нулевым.

Вот код:

$year_pub = filter_var($_POST['year'], FILTER_SANITIZE_NUMBER_INT); 
$id_book = filter_var($_POST[‘id’], FILTER_SANITIZE_NUMBER_INT); 

/* 
* DB CONNECT 
*/ 

$query = "UPDATE table_books SET year_pub=:year_pub WHERE id_book=:id_book"; 
$stmt = $dbH->prepare($query); 
$stmt->bindParam(":year_pub", $year_pub, PDO::PARAM_INT); 
$stmt->bindParam(":id_book", $id_book, PDO::PARAM_INT); 
$stmt->execute(); 

Вот некоторые результаты:


[year_pub поле имеет значение по умолчанию]

Если по умолчанию 0 UPDATE не работает.

Если значение по умолчанию 1 UPDATE не работает.

Однако вторая попытка ОБНОВЛЕНИЯ работает.


[year_pub поле не имеет Значение по умолчанию] ('заполнитель' значение вместо этого)

если placeholder значение 0 UPDATE не работает

если placeholder значение 1 UPDATE работает


Это очень странное поведение. Я никогда не видел этого раньше. Может кто-нибудь объяснить, что здесь может произойти?

+1

Первое, что я заметил, это странная раскраска вашего кода из-за разных видов цитат, я бы посмотрел на это в первую очередь. –

+0

Хорошо, я думаю, теперь вижу его в блоке кода. Клавиша «Год» выделяется красным цветом. Теперь я понимаю свою ошибку. Фактическое поле в БД - это просто «год», который является ключевым словом MySQL. – Dev

+0

Это было вырезано-вставить из RTF. Это странно. – Dev

ответ

-1

Образец кода не был точным. Фактический запрос был:

$query = "UPDATE table_books SET year=:year WHERE id_book=:id_book"; 

Столбец был назван «год». Изменение имени столбца на «year_pub», как и должно было быть названо, устраняет проблему.

+0

Вы должны просто удалить вопрос в этом случае, потому что проблема была опечаткой, а не проблемой программирования. – chris85

 Смежные вопросы

  • Нет связанных вопросов^_^