为了账号安全,请及时绑定邮箱和手机立即绑定

使用 sqlsrv_query 插入日期的日期格式是什么?

使用 sqlsrv_query 插入日期的日期格式是什么?

PHP
慕妹3146593 2023-08-19 16:33:19
我通过这个 sql 查询获取所有行:$sql = "SELECT * FROM USERS";$stmt3 = sqlsrv_query( $conn, $sql3 , $params, $options );但是当我想插入时:$sql2 =    "INSERT INTO USER (USER_ID, USER_NOM, USER_DATE)    VALUES (".$row['USER_ID'].", '".$row['USER_NOM']."','".$row['USER_DATE']->format('Y-m-d h:i:s.v')."')";我收到此错误:将 varchar 数据类型转换为 datetime 会产生超出范围的值。这是我的$sql2:INSERT INTO USER (USER_ID, USER_NOM, USER_DATE) VALUES (1,DANI,'2020-07-22 12:00:00.000')
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

您需要考虑以下事项:

  • 您需要使用参数化语句来防止可能的 SQL 注入问题。正如文档中提到的,该sqlsrv_query()函数非常适合一次性查询,并且应该是执行查询的默认选择,除非有特殊情况。此函数提供了一种简化的方法,可以使用最少的代码执行查询。sqlsrv_query 函数执行语句准备和语句执行,并且可用于执行参数化查询。

  • 默认情况下smalldatetimedatetimedate、 、timedatetime2datetimeoffset类型将作为 PHP DateTime 对象返回,但可以通过'ReturnDatesAsStrings'在连接字符串或语句级别设置选项来更改此行为。

如果您确定日期/时间值作为 PHP DateTime 对象返回,您有两个选择:

  • 使用明确的格式将日期时间值作为文本传递(例如2020-07-22T12:00:00.000

  • 使用调用参数的扩展语法将日期时间值作为 PHP DateTime 对象传递sqlsrv_query()

示例(日期时间值作为文本传递):

<?php

// SELECT statement

$sql3  = "SELECT * FROM USERS";

$stmt3 = sqlsrv_query($conn, $sql3 , $params, $options);

if ($stmt3 === false) {

    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);

    exit;

}   


// INSERT statements

while ($row = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) { 

    $sql2 = "

        INSERT INTO USER (USER_ID, USER_NOM, USER_DATE) 

        VALUES (?, ?, ?)

    ";

    $params = array(

       $row['USER_ID'], 

       $row['USER_NOM'], 

       $row['USER_DATE']->format('Y-m-d\TH:i:s.v'));

    );

    $stmt2 = sqlsrv_query($conn, $sql2 , $params);


}

?>

示例(日期时间值作为 PHP DateTime 对象传递):


<?php

// SELECT statement

$sql3  = "SELECT * FROM USERS";

$stmt3 = sqlsrv_query($conn, $sql3 , $params, $options);

if ($stmt3 === false) {

    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);

    exit;

}   


// INSERT statements

while ($row = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) { 

    $sql2 = "

        INSERT INTO USER (USER_ID, USER_NOM, USER_DATE) 

        VALUES (?, ?, ?)

    ";

    $params = array(

        array($row['USER_ID'], SQLSRV_PARAM_IN),

        array($row['USER_NOM'], SQLSRV_PARAM_IN),

        array($row['USER_DATE'], SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_DATETIME, SQLSRV_SQLTYPE_DATETIME)

    );

    $stmt2 = sqlsrv_query($conn, $sql2 , $params);


}

?>


查看完整回答
反对 回复 2023-08-19
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

Datetime要插入到 type 中的值,Datetime应采用 'YYYY-MM-DD HH:MM:SS' 格式。

支持的范围是“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。

查看完整回答
反对 回复 2023-08-19
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号