Мой правильный SQL-запрос (проверен на phpmyadmin) возвращает неверный результат в PHP - PullRequest
1 голос
/ 14 февраля 2011

Позвольте мне объяснить. У меня есть простой запрос, который работает, когда я тестировал его на phpmyadmin, но он не возвращает правильный ответ в моем веб-приложении.

Это функция, которая выполняет запрос:

function GetProductsFromCategoryId($categoryId)
{
    global $db;
    $query = '
        SELECT *
        FROM `products`
        WHERE categoryID = 3';
    try {
        $statement = $db->prepare($query);
        //$statement->bindValue(':categoryId', $categoryId);
        $statement->execute();
        $result = $statement->fetch();
        $statement->closeCursor();
        return $result;
    } catch (PDOException $e) {
        $error_message = $e->getMessage();
        display_db_error($error_message);
    }
}

обычно categoryID = $ categoryID, но я жестко закодировал его как "3", потому что хотел увидеть результаты. Существует целый другой файл базы данных, который обрабатывает соединение, и я могу опубликовать их, если хотите, но другие функции работают нормально. Это шаблон, который я использую из книги Мурача, глава 24. Эта функция - моя, немного измененная.

С помощью SELECT * функция должна возвращать 2 массива для каждого продукта, как вы увидите позже, когда я отправлю свой результат из phpmyadmin. Вместо этого он возвращает только 1 массив для одного продукта.

Это запрос, который я запустил в phpmyadmin:

SELECT * FROM `products` WHERE categoryID=3;

и результат:

        9   3   ludwig  Ludwig 5-piece Drum Set with Cymbals    This product includes a Ludwig 5-piece drum set an...   699.99  30.00   2010-07-30 12:46:40
        10  3   tama    Tama 5-Piece Drum Set with Cymbals  The Tama 5-piece Drum Set is the most affordable T...   799.99  15.00   2010-07-30 13:14:15

Итак, как вы можете видеть, он должен возвращать массив 2, поскольку это то, что должна делать функция fetch (), но возвращает только один массив. У меня есть xdebug, настроенный с netbeans и смотрящий на переменную $ result, он имеет 1 массив с productName "Ludwig 5-piece ..."

Я застрял на этом в течение 3 дней, и я понятия не имею, почему это не работает. Пожалуйста, помогите!

Спасибо !!!

PS: вот продукты на столе в базе данных

        1   1   strat   Fender Stratocaster The Fender Stratocaster is the electric guitar des...   699.00  30.00   2009-10-30 09:32:40
        2   1   les_paul    Gibson Les Paul This Les Paul guitar offers a carved top and humbu...   1199.00 30.00   2009-12-05 16:33:13
        3   1   sg  Gibson SG   This Gibson SG electric guitar takes the best of t...   2517.00 52.00   2010-02-04 11:04:31
        4   1   fg700s  Yamaha FG700S   The Yamaha FG700S solid top acoustic guitar has th...   489.99  38.00   2010-06-01 11:12:59
        5   1   washburn    Washburn D10S   The Washburn D10S acoustic guitar is superbly craf...   299.00  0.00    2010-07-30 13:58:35
        6   1   rodriguez   Rodriguez Caballero 11  Featuring a carefully chosen, solid Canadian cedar...   415.00  39.00   2010-07-30 14:12:41
        7   2   precision   Fender Precision    The Fender Precision bass guitar delivers the soun...   799.99  30.00   2010-06-01 11:29:35
        8   2   hofner  Hofner Icon With authentic details inspired by the original, t...   499.99  25.00   2010-07-30 14:18:33
        9   3   ludwig  Ludwig 5-piece Drum Set with Cymbals    This product includes a Ludwig 5-piece drum set an...   699.99  30.00   2010-07-30 12:46:40
        10  3   tama    Tama 5-Piece Drum Set with Cymbals  The Tama 5-piece Drum Set is the most affordable T...   799.99  15.00   2010-07-30 13:14:15

Первый столбец - идентификатор продукта, а второй столбец - идентификатор категории.

Ответы [ 2 ]

10 голосов
/ 14 февраля 2011

Ваш $statement->fetch() возвращает только одну строку из базы данных. См. PDOStatement::fetch(). Я думаю, что вы хотите PDOStatement::fetchAll() вместо того, чтобы вернуть все строки из вашего запроса.

7 голосов
/ 14 февраля 2011

PDOStatement :: fetch () возвращает только одну строку за раз. Вы должны вызывать его итеративно, чтобы получить оставшиеся строки.

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