2015-04-07 3 views
0

Мой следующий SQL-запрос в PHP не работает полностью. Результат содержит только первую строку. Запрос полностью работает в PHPMyadmin, который возвращает мне все результаты.PHP MySQL запрос не возвращает все результаты

$select = "SELECT a.setID, a.setName, a.setPrimaryLanguage, a.setSecondaryLanguage 
      FROM Person_Set ps, Album a 
      WHERE ps.Person_username = :username 
      AND ps.Set_setID = a.setID"; 

    try { 
    $stmt = $dbh->prepare($select, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
    $stmt->bindValue(":username", $username, PDO::PARAM_STR); 
    $stmt->execute(); 

    $result = $stmt->fetch(); 
    echo json_encode($result); 

    unset($stmt); 
    } catch (Exception $e) { 
    echo 'Exception : ' . $e->getMessage() . "\n"; 
    } 

Кроме того, если изменить критерии выбора для поиска строк, содержащих определенную строку, то результат пустой (возвращается «ложь»). Запрос ниже:

$select = "SELECT a.setID, a.setName, a.setPrimaryLanguage, a.setSecondaryLanguage 
      FROM Album a, Set_Card s 
      WHERE a.setName LIKE '%:searchText%' 
      AND a.setID = s.Set_setID 
      GROUP BY a.setID"; 

Я пытался различные способы подключения к MySQL и получить результаты, как

$results = $mysqli->query($query); 

вместо того, чтобы использовать PDO. Однако результаты все те же. Может ли кто-нибудь помочь указать, где мои ошибки? Большое спасибо!

+0

Try '$ результата = $ stmt-> fetchAll(); 'вместо' $ result = $ stmt-> fetch(); ' –

+0

Кроме того, именованные заполнители' '%: searchText% '' не обязательно должны быть указаны – Ghost

ответ

3

PDOStatement :: выборки - Выдает следующую строку из результирующего набора

Так что, когда вы просто выборки он выбирает первую строку, если вы не сделаете это, используя цикл, который меняет курсор следующей записи.

Вы можете получить все записи с помощью fetchAll метода

http://php.net/manual/en/pdostatement.fetch.php

http://php.net/manual/en/pdostatement.fetchall.php

+0

Большое спасибо ! –

1

PDOStatement::fetch выбирает одну строку и перемещает указатель на следующую строку. Вы будете использовать либо $results = $stmt->fetchAll() для получения всех результатов или цикл вроде этого:

while ($result = $stmt->fetch()) { 
    echo json_encode($result); 
} 
1

Привет вы используете выборки() функцию, которая выборки только один ряд вместо этого использовать этот код,

$select = "SELECT a.setID, a.setName, a.setPrimaryLanguage, a.setSecondaryLanguage 
      FROM Person_Set ps, Album a 
      WHERE ps.Person_username = :username 
      AND ps.Set_setID = a.setID"; 

    try { 
    $stmt = $dbh->prepare($select, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
    $stmt->bindValue(":username", $username, PDO::PARAM_STR); 
    $stmt->execute(); 

    $result = $stmt->fetchall(); 
    echo json_encode($result); 

    unset($stmt); 
    } catch (Exception $e) { 
    echo 'Exception : ' . $e->getMessage() . "\n"; 
    } 
Смежные вопросы