Я написал этот код:
require("config.php"); $rows = array(); $query = "SELECT accountname, bill_city, bill_code, bill_country, bill_street, latitude, longitude, setype FROM vtiger_accountbillads, vtiger_account, vtiger_geocoding WHERE accountaddressid = accountid AND accountid = crmid"; $result = mysqli_query($connection, $query); $rows_number = $result->num_rows; echo $rows_number . "<br/><br/>"; $row = mysqli_fetch_array($result); if($result->num_rows > 0){ for($i=0; $i < $rows_number; $i++) { $rows[] = array("name" => $row[0], "city" => $row[1], "code" => $row[2], "country" => $row[3], "street" => $row[4], "latitude" => $row[5], "longitude" => $row[6], "type" => $row[7]); } } $json = json_encode($rows); print $json; mysqli_free_result($row); mysqli_close($connection);
Я пытаюсь получить несколько данных, используя запрос, написанный в приведенном выше коде, но он отображает первую строку 47 раз. Зачем? Что я делаю не так? Благодаря!
Вам нужно выполнить итерацию по набору результатов, возвращаемому MySQL. Это означает вызов mysqli_fetch_array()
для каждой строки этого набора результатов. Вы можете сделать это, используя цикл while:
while($row = mysqli_fetch_assoc($result)) { $rows[] = array("name" => $row['name'], "city" => $row['bill_city'], "code" => $row['bill_code'], "country" => $row['bill_country'], "street" => $row['bill_street'], "latitude" => $row['latitude'], "longitude" => $row['longitude'], "type" => $row['setype']); } }
Не используйте для loop
для выборки SQL-запросов. Вместо этого используйте:
if($result->num_rows > 0){ while($row = mysqli_fetch_assoc($result)) { $rows[] = array("name" => $row[0], "city" => $row[1], "code" => $row[2], "country" => $row[3], "street" => $row[4], "latitude" => $row[5], "longitude" => $row[6], "type" => $row[7]); } }