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

数据库中没有数据

数据库中没有数据

PHP
幕布斯6054654 2023-07-30 13:18:42
我编写了一个 php 应用程序,它应该根据给定的日期从数据库中选择数据。数据库中的日期存储方式如下2020-07-03。执行该语句的代码如下所示$from = $_POST['from'];$to = $_POST['to'];$sql = "SELECT * FROM Database WHERE Date < $from";$stmt = sqlsrv_query($conn, $sql);if($stmt == false){    die( print_r( sqlsrv_errors(), true) );}echo $sql;while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) {    echo $row[0].", ".$row[1]."<br />";}$from是$to用户通过日期输入字段给出的范围,并返回用户输入,例如2020-07-02. “日期”字段的数据类型是日期。我没有收到任何错误或类似的错误,但它不会执行 while 循环,我不明白为什么。php
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

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

您需要通过以下方式之一传递参数值:

  • 作为使用明确日期格式 ( yyyymmdd) 的文本,

  • 使用扩展参数语法和适当的数据类型绑定。

例如,根据问题中的代码,使用日期的文本值:

<?php

// Connection

$server    = 'server,port';

$database  = 'database';

$uid       = 'uid';

$pwd       = 'pwd';

$cinfo = array(

   "ReturnDatesAsStrings" => true,

   "Database" => $database,

   "UID" => $uid,

   "PWD" => $pwd

);

$conn = sqlsrv_connect($server, $cinfo);

if ($conn === false) {

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

   exit;

}


// Test input

$from = (new DateTime('2020-07-02'))->format('Ymd');

$to   = (new DateTime('2020-07-03'))->format('Ymd');


// Statement

$sql = "

    SELECT * 

    FROM Database 

    WHERE (? <= [Date]) AND ([Date] <= ?)"

;

$params = array($from, $to);

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

if($stmt == false){

    die( print_r( sqlsrv_errors(), true) );

}

echo $sql;


// Data

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) {

    echo $row[0].", ".$row[1]."<br />";

}


// End

sqlsrv_free_stmt($stmt);


?>

例如,根据问题中的代码,使用 PHP 日期对象和适当的参数绑定:


<?php

// Connection

$server    = 'server,port';

$database  = 'database';

$uid       = 'uid';

$pwd       = 'pwd';

$cinfo = array(

   "ReturnDatesAsStrings" => true,

   "Database" => $database,

   "UID" => $uid,

   "PWD" => $pwd

);

$conn = sqlsrv_connect($server, $cinfo);

if ($conn === false) {

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

   exit;

}


// Test input

$from = new DateTime('2020-07-02');

$to   = new DateTime('2020-07-03');


// Statement

$sql = "

    SELECT * 

    FROM Database 

    WHERE (CONVERT(date, ?) <= [Date]) AND ([Date] <= CONVERT(date, ?))"

;

$params = array(

   array($from, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_DATETIME, SQLSRV_SQLTYPE_DATETIME),

   array($to, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_DATETIME, SQLSRV_SQLTYPE_DATETIME)

);

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

if($stmt == false){

    die( print_r( sqlsrv_errors(), true) );

}

echo $sql;


// Data

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) {

    echo $row[0].", ".$row[1]."<br />";

}


// End

sqlsrv_free_stmt($stmt);


?>


查看完整回答
反对 回复 2023-07-30
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信