2016-08-16 19 views
-3

データベースへの接続が正常に機能しています。私のアプリケーションでは、最初の行を除くすべてのデータを表示できます。 MySQL Workbenchを使ってローカルで実行すると、最初の行とその後のすべての行がフェッチされます。最初の行を取得していないのは私のPHPコードだけですが、なぜ私は不明です。PHPがmysqlデータベースから最初の行を選択しない

<?php 
//connect with database 
$connect= new mysqli($host,$user,$pass,$db) or die("ERROR:could not connect to the database!"); 


$query="select * from college"; 
$result=$connect->query($query); 


$jsonData = array(); 
while ($array = mysqli_fetch_assoc($result)) { 
    $jsonData[] = $array; 
} 

echo json_encode($jsonData); 
?> 
+4

私はそのコードは、この問題を持っていなければならない理由はいかなる理由が表示されません。これまで、この症状を報告したのは、ループの前に 'fetch'関数を余分に呼び出したためです。あなたは本当のコードでそれを持っていますか? – Barmar

+0

クエリと結果の取得を開始するタイミングをすべて表示します。問題はこの抜粋にはありません。 – BeetleJuice

+0

結果を確認してください。 'print_r($ array);'ループの中にコードを置きます。 –

答えて

1

あなたが共有した抜粋コードは問題ありません。あなたの問題は他の場所から発生していると思われます。クエリのすべての結果を扱うつもりなら、私がお勧めするのは、それらをすべてフェッチし、フェッチしたものを処理することです。これにより、忘れてしまったフェッチコールで結果ポインタを前進させないようにして、最初の結果がどこに行くのか疑問に思うことはありません。

の代わりに:

while ($array = mysqli_fetch_assoc($result)) { 
    $jsonData[] = $array; 
} 

の操作を行います。それはあなたのスクリプトより多くのリソースが空腹になるよう

//remember to error-check before you try using the results of a query 
$result = $connect->query(...) or die($connect->error); 
$jsonData = $result->fetch_all(MYSQLI_ASSOC); 

この変更はメモリ内の結果のコピーを作成します。 500または1000の結果がある場合はおそらく問題ありませんが、50万または1,000,000の結果がある場合は、決定する前にベンチマークを行う必要があります。

+0

条件なしの 'SELECT *'は常に問題を求めていますので、ここで注意することをお勧めします。 – tadman

+0

@tadman良い点。この場合、オペレータはすべての結果をちょうど連続してフェッチします。 'foreach'の終わりに、メモリプリントはおそらく' fetch_all'が使用されたのと同じくらい大きいので、おそらく私の警告は私が最初に思ったほど密かにはありません。 – BeetleJuice

+0

あなたが提案したコードを置き換えましたが、自分のサーバーに接続できませんでした。それは私にHTTP 500エラーを与えた。 – ndb1995

0

はこれをやってみてください:

<?php 
$query = mysqli_query($con, "SELECT * FROM college"); 
while($row = mysqli_fetch_array($query)){ 

    $arr[] = $row; 

} 

$json = json_encode($arr); 
print $json; 
+0

これはどのように問題を解決するのに役立ちますか? – showdev

+0

@showdevはそれを行う別の方法です、それは動作する可能性があります –

関連する問題