【问题标题】:NULL date value from a PHP Variable to MySQL从 PHP 变量到 MySQL 的 NULL 日期值
【发布时间】:2017-04-24 18:06:39
【问题描述】:

我在 joomla 中工作,并且在未设置时无法存储 NULL 日期值而不是 0000-00-00。 在 MySql 表中,日期字段设置为默认值 NULL,并且选中了 null 复选框。 我尝试了在这里找到的所有建议,但没有成功。

这里是我的日期变量:

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();

有什么建议吗?

提前致谢。

【问题讨论】:

  • 如果 ->quote()PDO::quote() 相同,如果与 NULL 一起使用,它将创建一个带引号的空字符串 ''。您最好了解如何在您的 DB 类中使用准备好的语句。
  • 在编写 SQL 命令字符串时,null 应该是字符串$var = 'null';,因为当null 值被强制转换为string 时,它会变成一个空值。但是对于您的 SQL,它不应该是 stringUPDATE .... column = null(正确)与 UPDATE .... column = "null" (incorrect) 不同。

标签: php mysql joomla


【解决方案1】:

感谢@PaulSpiege 和@GabrielHeming,他们给了我一个起点,我找到了解决方案。

实际上->quote() 创建一个带引号的字符串' 'NULL 必须不带引号地存储在MySql 中,所以,对于像我一样对此感到迷茫的人,这里是解决方案:

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 = array(
$db->quote($whateverelse),
$fbdataE,
$db->quote($whateverelse)
);

就是这样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多