Laravel 原始查询不返回结果
Posted
技术标签:
【中文标题】Laravel 原始查询不返回结果【英文标题】:Laravel Raw Query Not Returning a Result 【发布时间】:2014-02-11 04:58:03 【问题描述】:硬编码查询
$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 的值作为硬编码值传递给查询时,我得到了所需的结果集。但是,当我动态传递值时,查询返回一个空结果集。
我已经为此反复讨论了很长一段时间,并且不知道如何进一步解决此问题。更令人困惑的是,这些确切的查询在我的开发环境中有效,但在我推送到 prod 时却无效。
通过故障排除,在意识到当我传入原始的硬编码值时,我得到了一个有效的结果集之前,我确保开发和生产 ENV 之间只有很小的 php / mysql 版本差异。我三次检查用户是否具有适当的数据库权限。而且,我删除了我的日志文件。但是,这些实际上都不能帮助我们了解这里实际出了什么问题。
由于我最近才开始重新开始开发,并且只玩了 L4 一两个星期,我希望有更多经验的人能看到是什么原因造成的(我有一种奇怪的感觉,即这将是一个 ID10T 错误..)。
我期待您提供任何建议和见解。
-- 编辑--
由于查询返回(空)结果(并且没有抛出错误),因此就 MySQL 而言,查询似乎是“工作”。但是,无论出于何种原因,它都不会返回结果集。我不确定这是否与 PDO、Eloquent 或其他完全有关。这是对不相关表的基本 SELECT * 查询;不应该这么麻烦。
而且,我很困惑为什么其他 select 语句可以正常工作,但这个不是。当然,我正在查询一个与模型无关的表(没有定义 DB/L4 关系;这是一个一次性的 Select 语句,以便进行一些基本的数学运算)。
不幸的是,在我解决这个问题之前我无法继续...
【问题讨论】:
【参考方案1】:我在问题中表示我认为这可能是一个 ID10T 错误,并且确实如此。
在再次对其进行var_dump($symbols)
并仔细观察后,我意识到每个 $ 符号后面都有一个尾随空格,与表格中的任何内容都不匹配。啊哈!因此,查询成功执行并始终返回正确的结果;去搞清楚。 ;)
有趣的是,我应该在使用 Laravel 的 http://laravel.com/docs/eloquent#accessors-and-mutators 将它们插入数据库表之前对 $symbols 进行修剪,正如#laravel 中出色的 AndreasLutro 所指出的那样。
【讨论】:
以上是关于Laravel 原始查询不返回结果的主要内容,如果未能解决你的问题,请参考以下文章