2013-06-06 3 views
0

Я хочу ОБНОВИТЬ NULL в мою базу данных, если значение сообщения пустое. Если он не пуст, я хочу, чтобы он вставлял опубликованное значение.Отправка NULL в базу данных - одинарные кавычки?

if(empty($post['gallery']))$post['gallery'] = NULL; 

Это довольно большой запрос, так вот немного я заинтересован в:

"article.article_gallery_id = '".$post['gallery']."', ". 

выше никогда не вставляет NULL, но 0.

Это делает вставить NULL:

Я считаю, что проблема связана с одинарными кавычками вокруг $ post ['gallery']. Если я их удалю, запрос не работает вообще.

Как это исправить?

Я не хочу использовать PDO и не беспокоюсь о безопасности. Я взял бит для примера.

+0

Не используйте старые функции mysql_, поскольку они устарели. Что-то вроде этого, вам гораздо лучше использовать PDO или mysqli. – aynber

+0

Я думаю, вы имели в виду '$ _POST' вместо' $ post'. Если это так, вы уязвимы для SQL-инъекций. Перейдите к [подготовленным заявлениям] (http://bobby-tables.com/php.html). –

+0

Каким типом данных является ваш столбец 'article_gallery_id'? – Fabio

ответ

-1

Вы должны установить таблицу по умолчанию нулевого значения, но на самом деле это исправить, вам придется переключать кавычки, Php оценивает любой вар между "и не так теперь установить пустое значение, а не буквально нуль.

лучшее решение это хотя

if(empty($post['gallery']))$post['gallery'] = "NULL"; 

, то это фактически помещает в значение NULL MySQL необходимо

+0

Нет, это по-прежнему ставит 0. – panthro

+0

, потому что вы столбец не допускает NULL, тогда это не тот код, который является проблемой, его БД. '0' появляется, потому что ваш столбец настроен как INT и не разрешает NULL! –

1

PHP null не будет конвертировать в SQL NULL при вводе его в строку.
Если значение пустое, запрос должен выглядеть как article.article_gallery_id = NULL.
Если это не пусто, запрос должен выглядеть как article.article_gallery_id = 'value'.
Сравните использование котировок и кавычек и ключевое слово NULL. Вам нужно явно форматировать запрос таким образом, вы не можете полагаться на значение PHP null.

+0

OP вставляет одиночные кавычки независимо от того, что означает, что они никогда не получат SQL 'NULL'. – NullUserException

+0

@NullUserException Именно поэтому я указываю это. – deceze

0

Вам не нужно ставить кавычки в SQL вокруг нулевой:

if(empty($post['gallery'])){ $post['gallery'] = "NULL"; } 
$sql = "UPDATE article SET article.article_gallery_id = " . $post['gallery'] . " WHERE somefield = 'someValue'"; 

Вы должны избегать использования функциональных возможностей MySQL, как его амортизации. Попробуйте MySQLi или PDO

0

Да, удалите кавычки, потому что вы имеете дело с целыми числами, а не с строками.

Почему это не так? Попробуйте это:

echo "column = " . null; 

Это эхо "столбец =", потому что null является то, что он говорит: ничего. Вы должны учитывать специальный случай, когда имеет значение NULL.

$sqlQuery .= 
    "article.article_gallery_id = " 
    . (is_null($post['gallery']) ? 'NULL' : $post['gallery']) 
    . " [rest of your query here] "; 
0

Чтобы вставить null в базу данных, вы должны удалить кавычки вокруг него. Я заметил, что вы сказали, что попробовали, и это не сработало. Я представляю, что произошло тогда, что у вас возникла другая ошибка. Вы сказали, что запрос длинный, поэтому, возможно, ошибка произошла где-то в другом месте?Вот простой способ решить:

$post['gallery'] = (!empty($post['gallery'])) "'$post[gallery]'" : 'NULL'; 

"article.article_gallery_id = $post[gallery], ". 

Если вы заметили, что я удалил одинарные кавычки из запроса и добавить их к сообщению вар, если он не пустой.

Я надеюсь, что это поможет!

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