首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel原始查询未返回结果

Laravel原始查询未返回结果
EN

Stack Overflow用户
提问于 2014-02-11 12:58:04
回答 1查看 1.7K关注 0票数 0

硬编码查询

代码语言:javascript
运行
复制
$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 ) 

)

代码语言:javascript
运行
复制
# 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) } 

...

}

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

代码语言:javascript
运行
复制
$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;

结果

代码语言:javascript
运行
复制
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语句,目的是执行一些基本的数学运算)。

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

EN

回答 1

Stack Overflow用户

发布于 2014-02-11 15:17:40

我在问题中指出,我认为这可能是一个ID10T错误,事实的确如此。

在对它进行了一次var_dump($symbols)操作并仔细观察之后,我意识到每个$symbols后面都有一个尾随空格,与表中的任何内容都不匹配。啊哈!因此,查询执行成功并始终返回正确的结果;;)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21693489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档