将PHP NULL变量值插入MSSQL查询

时间:2017-05-05 11:45:07

标签: php sql sql-server null sqlsrv

我有这个PHP IF语句正常工作'

if(EMPTY($_POST['review_date'])){
    $review_date = NULL;
}
else {
    $review_date = $_POST['review_date'];
}

当我将变量传递给sqlsrv_query时,问题就出现了:

sqlsrv_query($connect,"UPDATE goals SET review_date='$review_date' WHERE id='$department'") or die(sqlsrv_errors());

在IF语句为TRUE的情况下,review_date单元格中的值显示为1900-01-01,而不是NULL。

如果我尝试在IF语句中的NULL值周围加上引号,我会收到以下错误:

  

注意:数组转换为字符串   C:\ xampp \ htdocs \ project \ edit.php on   第30行

如果直接将NULL插入查询,它将按原样执行。

目标表中的列属性启用了允许空值,默认值设置为(NULL)。

通过其他问题解决,但没有真正到达任何地方。

我在这里做错了什么?

更新1:

根据要求,这是HTML代码:

<form method="POST" action="edit.php">

Review date <i>(optional)</i>: <input type="date" name="review_date" value="" placeholder="dd/mm/yyyy" > 

<p><button type="submit">Save</button></p>

</form>

关于var_dumps:

var_dump($review_date);

退回: NULL

var_dump($department);

退回:字符串(2)&#34; 36&#34;

var_dump(sqlsrv_query($connect,"UPDATE goals SET review_date='$review_date' WHERE id='$department'"));

返回:类型(SQL Server语句)的资源(7)

3 个答案:

答案 0 :(得分:1)

您的代码很危险,因为它包含SQL注入!

你应该这样做:

if(EMPTY($_POST['review_date'])){
    $review_date = NULL;
}
else {
    $review_date = $_POST['review_date'];
}

$sql = "UPDATE goals SET review_date=? WHERE id=?";
$params = array($review_date, $department);

$stmt = sqlsrv_query( $conn, $sql, $params);

通过在查询中使用参数,您可以毫无问题地传输此空值。

始终使用参数!

答案 1 :(得分:0)

将NULL分配给var意味着一个空日期,而不是一个空日期,所以

您可以使用不同的条件来生成所需的代码

if(EMPTY($_POST['review_date'])){
    $code = ' SET review_date = NULL ' ;
}
else {
    $code = ' SET review_date = ' $_POST['review_date'];
}


sqlsrv_query($connect,"UPDATE goals ". $code . " WHERE id='$department'") or die(sqlsrv_errors());

小心使用php var在sql代码中你可能成为sqlinjection的受害者

答案 2 :(得分:0)

这是因为每当有缺失值时,将其发送为NULL而不是空字符串。空字符串将默认为1900-01-01

declare @d datetime
set @d=''
select @d as date

结果

1900-01-01 00:00:00