2016-07-20 2 views
0

誰でも、なぜこのはfetchAll()が任意のアイデアを持っている

$stmt = $this->prepare($this->sql); 
$exec = $stmt->execute($this->bindings); 
// The below returns an empty array() 
return $exec->fetchAll(PDO::FETCH_OBJ); 
// This however will return rows if looped. 
return $exec->fetch(PDO::FETCH_OBJ); 

でも奇妙これはのみのために、私達のデータベース内の特定のIDの範囲で起こっていることである起こるすべての結果を)(フェッチとルーピング取得、空の配列を返します。たとえば、商品ID 552の商品に関するさまざまな情報を検索した場合、上記のコードはfetchAll()でも問題なく動作しますが、553に変更して失敗します(空の配列)。 554が再び動作します。アイテム間のDB内のデータには事実上違いはありません(すべて整数とタイムスタンプ[ジオロケーションデータ])。

+0

いくつかのデバッグを追加します。実行後に$ stmtの行数を確認します。完全に失敗した場合、fetch/fetchallはboolean falseを返します。結果がない場合(ただし有効な結果ハンドル)、空の配列が返されます。ほとんどの場合、fetch/fetchallはFINEで動作しています。何も見つからないクエリです。 –

+0

rowCountは23を返し、columnCountは2を返します。fetchもfetchAllもfalseを返しません。 raw sqlコマンド(準備されたstmtからエミュレートされた)を実行すると、コマンドラインで正常に動作します。 – varbrad

+0

Ah、サーバを再起動してMySQLを停止して再起動しました。奇妙な問題。 – varbrad

答えて

0

私はこの夕方にもう一度私たちのサーバーにヒカっこっているので、私はここで答えを返すだろう。それは以前の項目データセット(以前はどのエンコーディングであるかわからなかった)と、新しいutf-8エンコーディングで問題が発生していたことがわかりました。 PHPはうまく変換されなかったいくつかの文字(いくつかの辺と奇妙な文字)にハングアップしていましたが、PHPは逆に有効な配列を返しましたが、json_encodeは処理できず、スクリプトをクラッシュさせ、私たちのjQueryのクライアントサイドの実装と独自のエラーチェックPHPバックエンド(さらに奇妙で、より多くの調査がそこに必要ですが、それはこの質問の範囲外です)の両方で)。

私の解決策は、クロスエンコードの問題を気にすることなく、ネイティブにutf-8にあるAPIとアイテムスキーマから新しいエンコードに直接データを再コピーすることでした。小さなサブセットでテストされ、問題は最終的には寝たきりになったようです。 :)

関連する問題