Laravel Raw查询未返回结果

时间:2014-02-11 04:58:04

标签: php mysql laravel-4

硬编码查询

$stock = DB::select("SELECT * FROM reports_finra WHERE symbol = ? ", array('CWCO'));     // works and returns valid result set

Array ( 
[0] => Array ( [query] => SELECT * FROM symbols [bindings] => Array ( ) [time] => 37.4 ) 
[1] => Array ( [query] => SELECT * FROM reports_finra WHERE symbol = ? [bindings] => Array ( [0] => CWCO ) [time] => 27.07 ) 

# result set when var_dump($stock)  ( [1]'s query )
array(11) { 

[0]=> object(stdClass)#5939 (7) { ["date"]=> int(20140116) ["symbol"]=> string(4) "CWCO" ["id"]=> int(1498) } 
[1]=> object(stdClass)#5940 (7) { ["date"]=> int(20140117) ["symbol"]=> string(4) "CWCO"  ["id"]=> int(8515) } 
[2]=> object(stdClass)#5941 (7) { ["date"]=> int(20140121) ["symbol"]=> string(4) "CWCO" ["id"]=> int(15526) } 

...

}

传递给查询的动态绑定变量

$symbol = $symbol->symbol;

echo $symbol;
echo '<br />';

$stock = DB::select("SELECT * FROM reports_finra WHERE symbol = ? ", array($symbol));

$query = DB::getQueryLog();
print_r($query);
echo '<br />';
var_dump($stock); exit;

结果

CWCO             // the result from echoing $symbol

Array (         // getQueryLog()
[0] => Array ( [query] => SELECT * FROM symbols [bindings] => Array ( ) [time] => 36.06 ) 
[1] => Array ( [query] => SELECT * FROM reports_finra WHERE symbol = ? [bindings] => Array ( [0] => CWCO ) [time] => 27.55 ) ) 

array(0) { }    // var_dump($stock);    

正如您所看到的,当我将符号值作为硬编码值传递给查询时,我得到了所需的结果集。但是,当我动态传递值时,查询返回一个空结果集。

我已经和我一起来回走了很长一段时间了,并且对于如何进一步解决这个问题没有想法。更令人困惑的是,这些确切的查询在我的开发环境中起作用,但在我推动生产时却没有。

通过故障排除,在意识到我传入原始的硬编码值之前,我得到了一个有效的结果集,我确保dev和prod ENV之间只有很小的PHP / MySQL版本差异。我三重检查用户是否具有正确的数据库权限。而且,我删除了我的日志文件。这些都没有真正帮助解决这里实际出错的问题。

由于我刚刚开始重新开发并且只使用L4玩了一两个星期,我希望有更多经验的人会看到导致这种情况的原因(我有一种奇怪的感觉,这将是一个ID10T错误..)。

我期待您提供任何建议和见解。

- 编辑 -

当查询返回(空)结果(而不是抛出错误)时,就MySQL而言,查询似乎“正常”。但是,它不会因任何原因返回结果集。我不确定这是否与PDO,Eloquent或其他完全相关。它是非相关表上的基本SELECT *查询;它应该不是那么麻烦。

而且,我很困惑为什么其他选择语句没有问题,但是这个没有。当然,我正在查询与模型无关的表(没有定义DB / L4关系;这是一次性的Select语句,以便进行一些必要的数学运算)。

不幸的是,在我解决这个问题之前我无法继续......

1 个答案:

答案 0 :(得分:0)

我在问题中说过,我认为这可能是ID10T错误,而且确实如此。

再次对var_dump($symbols)进行操作并稍微注意一下后,我意识到每个$符号后面都有一个尾随空格,与表格中的任何内容都不匹配。啊哈!因此,查询正在成功执行并始终返回正确的结果;去搞清楚。 ;)

有趣的是,我应该在使用Laravel的http://laravel.com/docs/eloquent#accessors-and-mutators将它们插入数据库表之前对$符号进行修剪,正如#laravel中令人敬畏的AndreasLutro所指出的那样。