硬编码查询
$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);
正如您所看到的,当我将symbol的值作为硬编码的值传递到查询中时,我得到了所需的结果集。但是,当我动态传递该值时,查询返回一个空的结果集。
我已经在这个问题上来回折腾了很长一段时间,对于如何进一步解决这个问题,我已经没有想法了。更令人困惑的是,这些精确的查询在我的dev环境中工作,而不是在我推送到prod时。
通过故障排除,在我意识到当我传入原始的硬编码值时,我得到了一个有效的结果集之前,我确保了开发环境和产品环境之间只有很小的PHP / MySQL版本差异。我三次检查了用户是否具有适当的DB权限。并且,我删除了我的日志文件。然而,所有这些实际上都不能帮助我们了解这里到底出了什么问题。
由于我最近刚刚开始重新开始开发,并且只使用了一两个星期的L4,我希望有更多经验的人会明白是什么导致了这一点(我有一种奇怪的感觉,这将是一个ID10T错误……)。
我期待着您可能提供的任何建议和见解。
-编辑--
当查询返回一个(空)结果(并且没有抛出错误)时,就MySQL而言,查询看起来是“工作的”。但是,无论出于何种原因,它都不会返回结果集。我不确定这是否与PDO、Eloquent或其他完全相关。它是对一个不相关的表的基本SELECT *查询;它不应该有这么多麻烦。
而且,我很困惑为什么其他select语句都能正常工作,而这条语句却不是。当然,我正在查询一个与模型无关的表(没有定义DB/L4关系;这是一条一次性的Select语句,目的是执行一些基本的数学运算)。
不幸的是,在我解决这个问题之前我不能继续...
发布于 2014-02-11 15:17:40
我在问题中指出,我认为这可能是一个ID10T错误,事实的确如此。
在对它进行了一次var_dump($symbols)
操作并仔细观察之后,我意识到每个$symbols后面都有一个尾随空格,与表中的任何内容都不匹配。啊哈!因此,查询执行成功并始终返回正确的结果;;)
有趣的是,我应该在使用laravel的http://laravel.com/docs/eloquent#accessors-and-mutators将$symbols插入DB表之前对它们进行修剪,正如#laravel中令人敬畏的AndreasLutro所指出的那样。
https://stackoverflow.com/questions/21693489
复制相似问题