硬編碼查詢
$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 ENVs之間只有很小的PHP/MySQL版本差異。我三重檢查了用戶擁有適當的數據庫權限。並且,我列出了我的日誌文件。這些實際上並沒有幫助揭示這裏實際出現的問題。當我剛剛開始重新開發並且只用L4玩了一兩週時,我希望有更多經驗的人會看到這是什麼原因造成的(我有一種奇怪的感覺)這將是一個ID10T錯誤..)。
我期待着您可能提供的任何建議和見解。
- 編輯 -
由於查詢返回的(空的)結果返回(而不是拋出一個錯誤),查詢似乎是「工作」至於MySQL的關注。但是,它不會因任何原因返回結果集。我不確定這是否與PDO,雄辯,或其他完全相關。這是對非相關表的基本SELECT *查詢;它不應該是這麼麻煩。
而且,我很困惑爲什麼其他選擇陳述沒有問題,但這不是一個問題。當然,我正在查詢一個與模型無關的表格(沒有定義DB/L4關係;這是一次性Select語句,以便進行一些基本的數學計算)。
不幸的是,我無法繼續,直到我得到這個工作了...