SQL 服务器时间格式不等于客户端时间格式
SQL Server Time Format is not equal to Client Side Time format
我正在尝试将客户端时间格式 ("14:00")
与 SQL 服务器时间格式 ("14:00:00.0000000")
与 SQL 查询进行比较,技术上不相等,因为 SQL 服务器时间格式有秒和毫秒,所以我尝试在 PHP 脚本中将秒和毫秒连接到客户端时间格式,就像这样 14:00.":00.0000000"
但不等于 SQL服务器时间格式。
我在 PHP 中的脚本:
// I assume that the $_POST['pAppointmentTime'] variable has a value of 14:00.
$pAppointTime = $_POST['pAppointmentTime'];
$pAppointTime = $pAppointTime.":00.0000000";
// SQL query
"SELECT * FROM appointment WHERE
pAppointment_Date = '".$pAppointSchedDate."' ".
"AND pAppointment_Time='".$pAppointTime."'".
" AND Department='".$selectedDept."';"
那么如何将这两个与 SQL 查询和 PHP 脚本进行比较?
您在 PHP 脚本 14:00 中使用了错误的语法。":00.0000000"
双引号的使用应该从头到尾像 --> "14:00:00.0000000"
我觉得你可以考虑以下几点:
- 不要连接字符串来构建语句并在语句中使用参数来防止可能的 SQL 注入问题。
- 使用明确的日期和时间格式将日期和时间值作为文本传递 -
yyyymmdd
和 hh:mm:ss
。
- 对于您的具体情况,您可以尝试使用显式转换来比较
date
和 time
值,并且只为 time
值添加秒数。
举个例子,这是您问题的可能解决方案:
<?php
// Connection info
$server = 'server\instance';
$database = 'database';
$uid = 'uid';
$pwd = 'pwd';
// Connection
try {
$conn = new PDO("sqlsrv:server=$server;Database=$database", $uid, $pwd);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch( PDOException $e ) {
die( "Error connecting to SQL Server".$e->getMessage());
}
// Parameters
$pAppointSchedDate = "date in yyyymmdd format";
$pAppointTime = $_POST['pAppointmentTime'];
$pAppointTime = $pAppointTime.":00";
$selectedDept = "...";
// Statement
try {
$sql = "
SELECT *
FROM appointment
WHERE
CONVERT(date, pAppointment_Date) = CONVERT(date, ?) AND
CONVERT(time(0), pAppointment_Time) = CONVERT(time(0), ?) AND
Department = ?
";
$stmt = $conn->prepare($sql);
$stmt->bindParam(1, $pAppointSchedDate, PDO::PARAM_STR);
$stmt->bindParam(2, $pAppointTime, PDO::PARAM_STR);
$stmt->bindParam(3, $selectedDept, PDO::PARAM_STR);
$stmt->execute();
while ($row = $stmt->fetch( PDO::FETCH_ASSOC) ){
echo print_r($row, true)."<br>";
}
} catch (PDOException $e) {
die ("Error executing query. ".$e->getMessage());
}
// End
$stmt = null;
$conn = null;
?>
我正在尝试将客户端时间格式 ("14:00")
与 SQL 服务器时间格式 ("14:00:00.0000000")
与 SQL 查询进行比较,技术上不相等,因为 SQL 服务器时间格式有秒和毫秒,所以我尝试在 PHP 脚本中将秒和毫秒连接到客户端时间格式,就像这样 14:00.":00.0000000"
但不等于 SQL服务器时间格式。
我在 PHP 中的脚本:
// I assume that the $_POST['pAppointmentTime'] variable has a value of 14:00.
$pAppointTime = $_POST['pAppointmentTime'];
$pAppointTime = $pAppointTime.":00.0000000";
// SQL query
"SELECT * FROM appointment WHERE
pAppointment_Date = '".$pAppointSchedDate."' ".
"AND pAppointment_Time='".$pAppointTime."'".
" AND Department='".$selectedDept."';"
那么如何将这两个与 SQL 查询和 PHP 脚本进行比较?
您在 PHP 脚本 14:00 中使用了错误的语法。":00.0000000"
双引号的使用应该从头到尾像 --> "14:00:00.0000000"
我觉得你可以考虑以下几点:
- 不要连接字符串来构建语句并在语句中使用参数来防止可能的 SQL 注入问题。
- 使用明确的日期和时间格式将日期和时间值作为文本传递 -
yyyymmdd
和hh:mm:ss
。 - 对于您的具体情况,您可以尝试使用显式转换来比较
date
和time
值,并且只为time
值添加秒数。
举个例子,这是您问题的可能解决方案:
<?php
// Connection info
$server = 'server\instance';
$database = 'database';
$uid = 'uid';
$pwd = 'pwd';
// Connection
try {
$conn = new PDO("sqlsrv:server=$server;Database=$database", $uid, $pwd);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch( PDOException $e ) {
die( "Error connecting to SQL Server".$e->getMessage());
}
// Parameters
$pAppointSchedDate = "date in yyyymmdd format";
$pAppointTime = $_POST['pAppointmentTime'];
$pAppointTime = $pAppointTime.":00";
$selectedDept = "...";
// Statement
try {
$sql = "
SELECT *
FROM appointment
WHERE
CONVERT(date, pAppointment_Date) = CONVERT(date, ?) AND
CONVERT(time(0), pAppointment_Time) = CONVERT(time(0), ?) AND
Department = ?
";
$stmt = $conn->prepare($sql);
$stmt->bindParam(1, $pAppointSchedDate, PDO::PARAM_STR);
$stmt->bindParam(2, $pAppointTime, PDO::PARAM_STR);
$stmt->bindParam(3, $selectedDept, PDO::PARAM_STR);
$stmt->execute();
while ($row = $stmt->fetch( PDO::FETCH_ASSOC) ){
echo print_r($row, true)."<br>";
}
} catch (PDOException $e) {
die ("Error executing query. ".$e->getMessage());
}
// End
$stmt = null;
$conn = null;
?>