如果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而不担心安全问题 - 我已经拿出了一些例子。
答案 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'";
答案 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值