将 PHP NULL 变量值插入到 MSSQL 查询中
Inserting PHP NULL variable value into MSSQL query
我的 PHP IF 语句有效 'fine':
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 值加上引号,我会收到以下错误:
Notice: Array to string conversion in
C:\xampp\htdocs\project\edit.php on
line 30
如果 NULL 直接插入到查询中,它会按原样执行。
目标 Table 中的列属性启用了允许空值,默认值设置为 (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);
返回: string(2) "36"
var_dump(sqlsrv_query($connect,"UPDATE goals SET review_date='$review_date' WHERE id='$department'"));
返回: 类型为(SQL 服务器语句)的资源 (7)
将 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());
小心在 sql 代码中使用 php var 你可能成为 sql 注入
的受害者
这是因为每当有缺失值时,将其作为 NULL 发送,而不是作为空字符串发送。空字符串将默认为 1900-01-01
前
declare @d datetime
set @d=''
select @d as date
结果
1900-01-01 00:00:00
您的代码很危险,因为它包含 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);
通过在查询中使用参数,您可以毫无问题地传输此空值。
始终使用参数!
我的 PHP IF 语句有效 'fine':
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 值加上引号,我会收到以下错误:
Notice: Array to string conversion in C:\xampp\htdocs\project\edit.php on line 30
如果 NULL 直接插入到查询中,它会按原样执行。
目标 Table 中的列属性启用了允许空值,默认值设置为 (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);
返回: string(2) "36"
var_dump(sqlsrv_query($connect,"UPDATE goals SET review_date='$review_date' WHERE id='$department'"));
返回: 类型为(SQL 服务器语句)的资源 (7)
将 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());
小心在 sql 代码中使用 php var 你可能成为 sql 注入
的受害者这是因为每当有缺失值时,将其作为 NULL 发送,而不是作为空字符串发送。空字符串将默认为 1900-01-01
前
declare @d datetime
set @d=''
select @d as date
结果
1900-01-01 00:00:00
您的代码很危险,因为它包含 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);
通过在查询中使用参数,您可以毫无问题地传输此空值。
始终使用参数!