从PHP变量到MySQL的日期值为NULL
我在joomla工作,在未设置日期值时,无法存储空日期值而不是0000-00-00。 在MySql表中,日期字段设置为默认值NULL,并选中NULL复选框。 我尝试了我在这里找到的所有建议,但没有成功 这里是我的日期变量:从PHP变量到MySQL的日期值为NULL,php,mysql,joomla,Php,Mysql,Joomla,我在joomla工作,在未设置日期值时,无法存储空日期值而不是0000-00-00。 在MySql表中,日期字段设置为默认值NULL,并选中NULL复选框。 我尝试了我在这里找到的所有建议,但没有成功 这里是我的日期变量: if (isset($fbpage['endTime'])): $fbdataE = (new DateTime($fbpage['endTime']))->format('Y-m-d'); else : $fbdataE = NULL ; endif; 这里是我
if (isset($fbpage['endTime'])):
$fbdataE = (new DateTime($fbpage['endTime']))->format('Y-m-d');
else : $fbdataE = NULL ; endif;
这里是我存储在MySql中的代码
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$columns = array(
'whateverelse',
'enddates',
'whateverelse'
);
$values = array(
$db->quote($whateverelse),
$db->quote($fbdataE),
$db->quote($whateverelse)
);
$query
->insert($db->quoteName('#__table'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
$db->setQuery($query);
$db->execute();
有什么建议吗
提前感谢。感谢@PaulSpiege和@GabrielHeming给了我一个起点,我找到了一个解决方案 实际上,
->quote()
创建一个带引号的字符串'
和NULL
必须存储在MySql unquoted中,因此,对于像我一样对此感到困惑的人,以下是解决方案:
1) 在日期条件下,我将NULL改为带引号的字符串“NULL”
if (isset($fbpage['endTime'])):
$fbdataE = (new DateTime($fbpage['endTime']))->format('Y-m-d');
else : $fbdataE = 'NULL' ; endif;
2) 我添加了一个新条件,如果是有效日期,则引用,如果不是,则取消引用
if($fbdataE !='NULL'):
$fbdataE = $db->quote($fbdataE);
else:
$fbdataE = $db->escape($fbdataE);
endif;
3) 当然,我只在values数组中放入了变量
$values = array(
$db->quote($whateverelse),
$fbdataE,
$db->quote($whateverelse)
);
就这样 如果
->quote()
与PDO::quote()
相同,则如果与NULL一起使用,将创建一个空的带引号字符串'
。您最好了解如何在DB类中使用准备好的语句代码>,因为当将null
值强制转换为字符串时,它将变为空值。但是对于SQL来说,它不应该是字符串
<代码>更新。。。。column=null
(正确)不同于更新。。。。column=“null”(不正确)
。