亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數據庫中沒有數據

數據庫中沒有數據

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 關注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號