Zend: как вставить значения NULL в MySQL

Я использую Zend Framework с MySQL, Apache и Ubuntu 9.04.

Я пытаюсь вставить значения NULL в базу данных следующим образом:

$personObj->setPersonId( '1' );
$personObj->setPersonEmail('NULL');
$personObj->save();

Но 'NULL' хранится в базе данных как строка, а не NULL.

Когда я использую это:

$personObj->setPersonId( '1' );
$personObj->setPersonEmail(NULL);
$personObj->save();

Но ничего не происходит и предыдущая запись не меняется.

Что мне делать, чтобы вставить значения NULL в MySQL?


person Naveed    schedule 13.11.2009    source источник
comment
Когда я использую $personObj-›setPersonEmail('NULL'); Он вставляет NULL как строку. Когда я использую $personObj-›setPersonEmail(NULL); предыдущая запись остается неизменной и ничего не происходит.   -  person Naveed    schedule 13.11.2009
comment
Какой тип объекта $personObj? Как уже говорили другие, не зная реализации setPersonEmail(), вы не можете определить, что нужно передать.   -  person Stefan Gehrig    schedule 13.11.2009
comment
$personObj — объект записи человека. setPersonEmail() — это способ установить значение для записи personEmail в базе данных. save() - это метод для сохранения всех установленных значений в базе данных. Это обычная практика в среде Zend. Как я уже сказал, он отлично работает для строковых значений, но проблема в записи NULL.   -  person Naveed    schedule 13.11.2009
comment
Это не помогает... Крайне важно знать реализацию setPersonEmail() и save(); особенно важно то, как данные записываются в базу данных. Между вызовом save() и моментом записи данных в базу данных может произойти многое.   -  person Stefan Gehrig    schedule 13.11.2009


Ответы (3)


Если вы не изменяете какие-либо значения после того, как они назначены, тогда

new $personObj->setPersonEmail(new Zend_Db_Expr('NULL'));
person Joseph Montanez    schedule 13.11.2009
comment
Это сработало и для меня, но я должен сделать new Zend_Db_Expr('NULL') - person Jake N; 01.06.2010

Первой мыслью было бы прямо передать ключевое слово null без кавычек вокруг него. Как сказал pavium, кавычки вокруг него превращают его в строку.

person Tarka    schedule 13.11.2009
comment
Я пробовал это $personObj-›setPersonEmail(null); Но не повезло. На самом деле я обновляю эту запись. Электронное письмо уже существует в базе данных, и я хочу удалить его и вставить NULL. - person Naveed; 13.11.2009
comment
Можно попробовать пустые кавычки, хотя это, скорее всего, просто сделает его пустой строкой. Вы пытались получить доступ к столбцу более напрямую, чем через функцию set? то есть: $personObj-›personEmail = null; - person Tarka; 13.11.2009

Я думаю, что помещение NULL в кавычки делает его похожим на строку.

Я не знаю о вашем методе, но для прямой вставки через команду mysql INSERT одинарные кавычки вокруг NULL неверны.

person pavium    schedule 13.11.2009
comment
Я также пробовал это $personObj-›setPersonEmail(NULL); Но ничего не произошло. Предыдущая запись не меняется. - person Naveed; 13.11.2009
comment
Это зависит полностью от того, как работает метод setPersonEmail() и подходит ли он для обновления записи. - person pavium; 13.11.2009
comment
Да обновляет. Когда я использую этот $personObj-›setPersonEmail('[email protected]'); Он заменяет предыдущую запись в базе данных на [email protected]. Но моя проблема заключается в том, чтобы удалить предыдущую запись и вставить NULL, если пользователь удалит свой адрес электронной почты. - person Naveed; 13.11.2009