sql запрос через PHP всегда пропускает первую строку - PullRequest
0 голосов
/ 08 января 2020

У меня странная проблема, и я не знаю, откуда эта проблема. У меня есть mySQL база данных с именем weather-app с таблицей cities в этой таблице. У меня есть список всех городов США (столбцы city и population).

Позвольте мне выполнить запрос непосредственно на моем SQL дБ:

SELECT * FROM cities WHERE city LIKE 'boston' ORDER BY population DESC

В результате я получаю

1840000455  Boston  MA  4637537
1840013902  Boston  GA  1315
1840024721  Boston  VA  674
1840026471  Boston  PA  236
1840009492  Boston  IN  130
1840026800  Boston  KY  89

Тот же запрос непосредственно через мой PHP дает мне следующее:

1840013902  Boston  GA  1315
1840024721  Boston  VA  674
1840026471  Boston  PA  236
1840009492  Boston  IN  130
1840026800  Boston  KY  89

Делает это для каждого запроса и только для первой строки.

Мой код:

index. html

<body>
    <?php require_once("config/db.php")?>
    <h2>Weather</h2>
    <input type="text" name="city-search" class="city-search" id="city-search">
    <ul class="result">
    </ul>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="scripts/app.js"></script>
</body>

app. js

search.addEventListener("keyup", e =>{
    let city = search.value;
    if(city != ""){
        loadCities(city);
    }
});

const loadCities = (city) => {
    $.ajax({
        url: "config/fetch-cities.php",
        method: "GET",
        data: {
            query: city
        },
        success: function(data){
            results.innerHTML = data;
        }
    });
}

fetch-city. php

<?php 
require("db.php");

if(isset($_GET["query"])){

    $search = $_GET["query"];

    $results = $conn->prepare("SELECT * FROM cities WHERE city LIKE '{$search}%' 
    ORDER BY population DESC");
} 

$results->execute();
$row_count =$results->fetchColumn();

foreach ($results as $row) {
    echo $row["city"] . "-" . $row["population"] ."<br/>";
}
?>

результат http://localhost:8080/weather-app/config/fetch-cities.php?query=Boston:

1 Ответ

4 голосов
/ 08 января 2020

Эта строка:

$row_count =$results->fetchColumn();

не возвращает счетчик строк. Он возвращает первый столбец из первой строки набора результатов и перемещает указатель на следующую строку, поэтому вы не получите первую строку в вашем foreach позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...