gpt4 book ai didi

php - 在 MS Access PDO 查询中绑定(bind)日期字符串参数

转载 作者:行者123 更新时间:2023-12-04 18:09:37 24 4
gpt4 key购买 nike

我制作了一个 PDO 数据库类,我用它来在 MS Access 数据库上运行查询。当使用日期条件进行查询时(在 SQL 中很常见),日期作为字符串传递。然而,Access 通常期望日期被散列包围。例如

SELECT transactions.amount FROM transactions WHERE transactions.date = #2013-05-25#;

如果我在哪里使用 PDO 运行此查询,我可能会执行以下操作。

//instatiate pdo connection etc... resulting in a $db object
$stmt = $db->prepare('SELECT transactions.amount FROM transactions WHERE transactions.date = #:mydate#;'); //prepare the query
$stmt->bindValue('mydate', '2013-05-25', PDO::PARAM_STR); //bind the date as a string
$stmt->execute(); //run it
$result = $stmt->fetch(); //get the results

就我的理解而言,上述结果的语句看起来像这样,因为绑定(bind)一个字符串会导致它被引号包围:

SELECT transactions.amount FROM transactions WHERE transactions.date = #'2013-05-25'#;

这会导致错误并阻止语句运行。

在不导致此错误的情况下,在 PDO 中绑定(bind)日期字符串的最佳方法是什么?我目前正在求助于 sprintf-ing 字符串,我确定这是不好的做法。

编辑:如果我传递了哈希包围的日期,那么我仍然会收到如下错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[22018]: Invalid character value for cast specification: -3030 [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression. (SQLExecute[-3030] at ext\pdo_odbc\odbc_stmt.c:254)' in C:\xampp\htdocs\ips\php\classes.php:49 Stack trace: #0 C:\xampp\htdocs\ips\php\classes.php(49): PDOStatement->execute() #1 C:\xampp\htdocs\ips\php\classes.php(52): database->execute() #2 C:\xampp\htdocs\ips\try2.php(12): database->resultset() #3 {main} thrown in C:\xampp\htdocs\ips\php\classes.php on line 49

最佳答案

通常在使用准备好的语句或参数化查询时,您无需担心分隔字符串和日期值;所有这些都在“幕后”为您处理。

我刚刚尝试了以下方法,它对我有用:

<?php
$connStr =
'odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};' .
'Dbq=C:\\Users\\Gord\\Desktop\\Database1.accdb;' .
'Uid=Admin;Pwd=;';

$dbh = new PDO($connStr);

$sql =
"INSERT INTO tblDateTest (dateCol) VALUES (?)";

$newDateTimeValue = "2013-06-30 17:18:19";

$sth = $dbh->prepare($sql);
if ($sth->execute(array($newDateTimeValue))) {
echo "Done\r\n";
}
else {
$arr = $sth->errorInfo();
print_r($arr);
}

关于php - 在 MS Access PDO 查询中绑定(bind)日期字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com