2014-04-01 44 views
0

所以这一直推动我坚果的最后两小时日期字段...PHP - 使用PDO与不工作

$sql = 'SELECT * FROM master_rets_table 
      WHERE listing_entry_timestamp > "2014-04-01 00:00:00" 
      ORDER BY listing_price DESC'; 
    } 
$this->stm = $this->prepare($sql); 
$this->stm->execute(); 

运行PDO超出此查询在Navicat工作正常(我得到17条记录) ,但无论我如何改变这种情况,它都不适用于PDO。我使用相同的代码来处理大量不使用日期约束的PDO查询,并且它们都可以很好地工作。

仅供参考,listing_entry_timestamp是DateTime字段

编辑 - 这里是整个代码块

if ($this->city != "") { 
    $sql = 'SELECT * FROM master_rets_table 
      WHERE city = '.$this->city.' 
      ORDER BY listing_price DESC'; 
    } 
    else if ($this->subdiv != ""){ 
    $sql = 'SELECT * FROM master_rets_table 
      WHERE subdivision REGEXP '.$this->subdiv.' 
      ORDER BY listing_price DESC'; 
    } 
    else if ($this->date_from != "") { 
    $sql = "SELECT * FROM master_rets_table WHERE (listing_entry_timestamp > '2014-04-01') ORDER BY listing_price DESC"; 
    } 

$this->stm = $this->prepare($sql); 
$this->stm->execute(); 

$this->rows= $this->stm->fetchAll(PDO::FETCH_ASSOC); 
$this->count = $this->stm->rowCount(); 
$this->rowIdx = 0; 

它的另外两起案件工作正常...它看起来好像是做日期时间字段什么的。

编辑[解决方案] - 事实证明,实时数据没有被推送到开发服务器,我在Navicat中对实时数据进行了测试,因此查找昨天数据的查询找不到任何东西。

+1

定义“不工作”。你会取得结果吗? –

+0

@你不工作=没有结果和$这是我设计的扩展PDO类,适用于很多不使用日期的查询。 – menriquez

+0

你会友善并为我们提供表格模式吗? – ROLO

回答

1

PDO与日期字段无关。
它与日期一起工作。

因此,寻找代码/数据库/环境/任何错误。

我为不同的数据库打赌。你与navicat连接的一个包含17条匹配记录,而你与PDO连接的记录包含nones。

第二个猜测是你的db类中的一些错误的代码。

什么是驱动坚果是毫无意义的建议与野生猜测。

O.K.

MySQL的

mysql> create table so_again(d datetime); 
Query OK, 0 rows affected (0.23 sec) 
mysql> insert into so_again values (now()); 
Query OK, 1 row affected (0.08 sec) 
mysql> select * from so_again where d > '2014-04-01 00:00:00'; 
+---------------------+ 
| d     | 
+---------------------+ 
| 2014-04-02 00:23:16 | 
+---------------------+ 
1 row in set (0.02 sec) 

PHP

$sql = 'select * from so_again where d > "2014-04-01 00:00:00"'; 
$stm = $pdo->prepare($sql); 
$stm->execute(); 
$stm = $stm->fetchAll(); 
var_dump($stm); 

ouptut

array(1) { 
    [0]=> 
    array(1) { 
    ["d"]=> 
    string(19) "2014-04-02 00:23:16" 
    } 
} 

它的工作原理。

至少与原始PDO。

  • 没有与SQL没有问题
  • 没有与PDO没有问题
  • 没有与日期没有问题
  • 没有用引号没有问题(只要我们采取17返回的结果是理所当然的。然而,在ANSI模式下,它们会导致错误)

只能有问题,用自己的代码/数据/输入

+0

这是我的代码...从我的IDE中剪切并粘贴。 execute()返回没有结果,但确切的查询在phpmyadmin和navicat中工作正常 – menriquez

+1

请阅读我的答案。我相信你没有结果。但这不是PDO的责任。 –

+1

您现在发布的代码与“从IDE剪切并粘贴”的代码截然不同。你有多少个IDE? –

-1
can you tell me the output when you execute this modified query: 

$sql = 'SELECT * FROM master_rets_table 
       WHERE (listing_entry_timestamp > :entry_date) 
       ORDER BY listing_price DESC'; 
     } 
    $this->stm = $this->prepare($sql); 
    $this->stm->execute(array("entry_date"=>"2014-04-01 00:00:00")); 
+1

为什么你需要输出,为什么你认为它会有什么不同? –

+1

好吧,你忘了在执行()结束时关闭parenth初学者... – menriquez

+0

@YourCommonSense是正确的......没有什么改变。 – menriquez

0

试试这个:

$sql = "SELECT * FROM master_rets_table WHERE listing_entry_timestamp > :date ORDER BY listing_price DESC"; 
$statement = $this->prepare($sql); 
$statement->bindParam (":date", "2014-04-01 00:00:00"); 
$statement->execute(); 
+1

他已经把它写成一个字符串了。 –

+0

在这里似乎没人理解SQL是如何工作的 –

+0

我从未见过**从未见过如此多的人从未运行过查询日期 –

0

只有两个我想到的事情是,你可能在date参数中有某种类型的转换错误,或者是逻辑路径错误。我还注意到,您将$city视为字符串,但您不引用它。

尝试:

if ($this->city != "") { 
    $where = 'city = ?'; 
    $match = $this->city; 
} else if ($this->subdiv != "") { 
    $where = 'subdivision REGEXP ?'; 
    $match = $this->subdiv; 
} else if ($this->date_from != "") { 
    $where = 'listing_entry_timestamp > ?'; 
    $match = 20140401; 
} else { 
    trigger_error("No search", E_USER_ERROR); 
} 

$sql = "SELECT * FROM master_rets_table WHERE {$where} ORDER BY listing_price DESC"; 
$this->stm = $this->prepare($sql); 
$this->stm->execute(array($match)); 

$this->rows = $this->stm->fetchAll(PDO::FETCH_ASSOC); 
$this->count = $this->stm->rowCount(); 
$this->rowIdx = 0; 

这都应该提供一个“可识别”参数PDO,并确保$sql确实填充。

另一种可能性

你说,

$city与PDO预格式化::报价()...这就是我的

如果是这样,让我们​​的老习惯假设$this->city最初是空的。

然后PDO::quote会将它变成一个空的带引号的字符串:即一对没有任何内容的引号。

然后,比较$this->city != ""总是会返回true,因为city不是“”,而是“”“。

因此,SQL将运行与您所期望的不同的查询。

+0

fyi'$ city'已预先格式化为'PDO :: quote()'.. 。那是我的一个老习惯 – menriquez

+0

啊,那么还有另一种可能。 – LSerni