【问题标题】:php - sql select query where date is greater then, including php variablesphp - sql 选择查询其中日期更大的地方,包括 php 变量
【发布时间】:2017-08-18 11:51:41
【问题描述】:

已阅读有关此问题的所有其他内容,但我找不到包含 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),但不是基于我表中的日期列。 我也试过不带 ``and:

$sql1  = "SELECT TOP 100 * FROM `$table_name $table_number` WHERE Systeemtijd > DATE `$date`";

全部报错:

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE[42000]:语法错误或访问冲突:0 [Microsoft][ODBC] Microsoft Access Driver] 查询中的语法错误(缺少运算符) 表达式“系统提示 > 2017 年 6 月 8 日 21:52:00”。 (SQLPrepare[0] 在 ext\pdo_odbc\odbc_driver.c:206)' 在 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->query('SELECT TOP 100 ...') #1 {main} 抛出 C:\Bitnami\wampstack-5.6.30-1\apache2\htdocs\php7\DataBuilt\Larissa_Connector\data_uploader.php 在第 65 行

【问题讨论】:

  • 不是mysql。它是 MS-access
  • 我猜你必须在$date周围使用单引号而不是反引号
  • 您的表格中是否有空格或$table_name $table_number 应该是什么?
  • 哦,是的,它确实是 MS 访问。会改变它。是的,我的表名中有空格。访问文件和表是自动生成的,所以我无法更改。
  • @Jens single qoutes 不能解决问题。同样的错误。

标签: php sql date ms-access pdo


【解决方案1】:

像这样传递变量不是一个好主意,你总是要知道如何正确地转义它们,尝试使用 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

【讨论】:

    【解决方案2】:

    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";
    

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 1970-01-01
      • 2016-04-01
      • 2011-06-16
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      相关资源
      最近更新 更多