已经阅读了有关此事的所有其他内容,但我找不到包含php变量的答案。
我想在数据库的某个日期之后选择前100个新记录。我无法让它发挥作用。
$connStr =
'odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};' .
'Dbq='.$ini_project['general']['document_location'].';';
$dbh = new PDO($connStr);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$time = strtotime('6-8-2017 21:52:00');
$date = date('j-n-Y H:i:s',$time);
$sql1 = "SELECT TOP 100 * FROM `$table_name $table_number` WHERE Systeemtijd > `$date`";
$result = $dbh->query($sql1);
while($row = $result->fetch()) {
print_r($row);
}
我可以从表格中的其他字段中选择记录(例如,WHERE值> 200),但不能基于表格中的日期列。 我也试过没有``和:
$sql1 = "SELECT TOP 100 * FROM `$table_name $table_number` WHERE Systeemtijd > DATE `$date`";
所有人都给出错误:
致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:0 [Microsoft] [ODBC Microsoft Access Driver]查询中的语法错误(缺少运算符) 表达'Systeemtijd> 6-8-2017 21:52:00'。 (SQLPrepare [0] at ext \ pdo_odbc \ odbc_driver.c:206)'in C:\ Bitnami \ wampstack-5.6.30-1 \的Apache2 \ htdocs中\ PHP7 \ DataBuilt \ Larissa_Connector \ data_uploader.php:65 堆栈跟踪:#0 C:\ Bitnami \ wampstack-5.6.30-1 \的Apache2 \ htdocs中\ PHP7 \ DataBuilt \ Larissa_Connector \ data_uploader.php(65): 抛出PDO->查询('SELECT TOP 100 ...')#1 {main} C:\ Bitnami \ wampstack-5.6.30-1 \ Apache2的\ htdocs中\ PHP7 \ DataBuilt \ Larissa_Connector \ data_uploader.php 第65行
答案 0 :(得分:0)
Access SQL中的日期应为#yyyy/mm/dd#
或#mm/dd/yyyy#
。任何其他日期格式都会导致问题。
$date = date('#y/n/j- H:i:s#',$time);
$sql1 = "SELECT TOP 100 * FROM `$table_name $table_number` WHERE Systeemtijd > $date";
答案 1 :(得分:0)
传递这样的变量不是一个好主意,你必须要知道如何正确地逃避它们,尝试使用PDO :: prepare:
/* Execute a prepared statement by passing an array of values */
$sql = "SELECT TOP 100 * FROM $full_table_name
WHERE Systeemtijd > :date";
$sth = $dbh->prepare($sql);
$sth->execute(array(':date' => $date);
$red = $sth->fetchAll();