向数据库提交NULL - 单引号问题?

时间:2013-06-06 16:15:01

标签: php mysql

如果post值为空,我希望将NULL更新为我的数据库。如果它不是空白,我希望它插入已发布的值。

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

这是一个相当大的查询,所以这里是我感兴趣的一点:

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

上面从不插入NULL而是0。

这会插入一个NULL:

"article.article_gallery_id = NULL, ".

我认为这个问题与$ post [' gallery']周围的单引号有关。如果我删除它们,查询根本不起作用。

我该如何解决这个问题?

我不想使用PDO而不担心安全问题 - 我已经拿出了一些例子。

5 个答案:

答案 0 :(得分:1)

将PHP null放入字符串时,它不会转换为SQL NULL 如果值为空,则查询需要看起来像article.article_gallery_id = NULL 如果它不为空,则查询需要看起来像article.article_gallery_id = 'value' 比较引号和没有引号的使用以及NULL关键字。您需要以这种方式显式格式化查询,不能依赖PHP null值。

答案 1 :(得分:0)

您不需要在SQL周围使用引号:

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

您应该避免使用MySQL功能作为其折旧。试试MySQLiPDO

答案 2 :(得分:0)

是的,删除引号,因为你处理的是整数,而不是字符串。

为什么失败呢?试试这个:

echo "column = " . null;

它回应“column =”,因为null就是它所说的:什么都没有。当$post['gallery']为空时,您需要考虑特殊情况。

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

答案 3 :(得分:0)

要将null插入数据库,您必须删除它周围的引号。我注意到你说你试过了它并没有用。我想当时发生的是你发生了不同的错误。你说查询很长,所以错误可能发生在其他地方?这是解决问题的简单方法:

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

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

如果您注意到我从查询中删除了单引号,并将其添加到post var中,如果它不为空。

我希望有所帮助!

答案 4 :(得分:-1)

你应该将你的表默认设置为null,但要实际修复此问题,你必须切换引号,pHP评估“之间的任何变量”,现在不设置空值而不是字面上的空。

这是最佳解决方案

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

然后它实际上放入了mysql需要的NULL值