php - sql select查询日期大于的地方,包括php变量

时间:2017-08-18 11:51:42

标签: php sql date ms-access pdo

已经阅读了有关此事的所有其他内容,但我找不到包含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行

2 个答案:

答案 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();

http://php.net/manual/en/pdo.prepare.php