2014-02-11 41 views
0

硬編碼查詢

$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) 

Laravel原始查詢不返回一個結果

# 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 ENVs之間只有很小的PHP/MySQL版本差異。我三重檢查了用戶擁有適當的數據庫權限。並且,我列出了我的日誌文件。這些實際上並沒有幫助揭示這裏實際出現的問題。當我剛剛開始重新開發並且只用L4玩了一兩週時,我希望有更多經驗的人會看到這是什麼原因造成的(我有一種奇怪的感覺)這將是一個ID10T錯誤..)。

我期待着您可能提供的任何建議和見解。

- 編輯 -

由於查詢返回的(空的)結果返回(而不是拋出一個錯誤),查詢似乎是「工作」至於MySQL的關注。但是,它不會因任何原因返回結果集。我不確定這是否與PDO,雄辯,或其他完全相關。這是對非相關表的基本SELECT *查詢;它不應該是這麼麻煩。

而且,我很困惑爲什麼其他選擇陳述沒有問題,但這不是一個問題。當然,我正在查詢一個與模型無關的表格(沒有定義DB/L4關係;這是一次性Select語句,以便進行一些基本的數學計算)。

不幸的是,我無法繼續,直到我得到這個工作了...

回答

0

我,我認爲這可能是一個錯誤ID10T的問題指出,這是。

在做了一次var_dump($symbols)之後,再仔細觀察一下,我意識到每個$符號後面都有一個尾隨空格,它們與表中的任何內容都不匹配。啊哈!所以,查詢成功執行並且一直返回正確的結果;去搞清楚。 ;)

有趣的事情要注意,我應該在$符號上進行修剪,然後使用Laravel的http://laravel.com/docs/eloquent#accessors-and-mutators將它們插入到數據庫表中,正如#laravel中的真棒AndreasLutro指出的那樣。