将php null变量值插入MSSQL查询



我有此php,如果语句正常工作':

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语句为真的情况下,eview_date单元格中的值显示为1900-01-01,而不是null。

如果我尝试在if语句中围绕零值围绕null值进行引号,则会收到以下错误:

注意:到字符串转换的数组 c: xampp htdocs project project edit.php on 第30行

如果将null直接插入查询,则它会尽可能执行。

目标表中的列属性允许启用nulls,默认值设置为(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(" 36"

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

返回: type(SQL Server语句(的资源(7(

您的代码很危险,因为它包含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);

通过查询中的参数,您可以无问题传输此空值。

始终使用参数!

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

ex

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

结果

1900-01-01 00:00:00

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

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

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

在SQL代码中使用php var请小心您可能是SQLINPOCTion

的受害者

相关内容

  • 没有找到相关文章

最新更新