2013-05-16 2 views
0

Я не могу заставить этот запрос работать. Он показывает только первую запись в БД. Любые идеи получили высокую оценку.Невозможно получить PDO SQL-запрос для работы

/* подготовить */

$sql = "SELECT personal.firstName, personal.lastName, etc. 
     FROM personal 
     LEFT JOIN exam 
     ON personal.P_ID=exam.P_ID 
     LEFT JOIN contact 
     ON exam.P_ID=contact.P_ID 
     WHERE exam.Level = ? 
     AND exam.Centre!='' ORDER BY exam.Centre"; 

$stmt = $db->prepare($sql); 

/* Выполнить */ $ stmt-> выполнить (массив ($ уровень));

/* Fetch */ 
      $row = $stmt->fetch(PDO::FETCH_ASSOC);  





/* Display */ 
        echo '<table> 
         <tr> 
        <td>Name</td> 
        <td>Surname</td> 
        <td>Paid?</td> 
        <td>Etc</td> 
        <td>Etc</td> 
        <td>Etc</td> 
         </tr>'; 

если ($ строка) { Еогеасп ($ строка как $ ключ => $ значение)

   { 
       echo '<td>'; 
       echo $value; 
       echo '</td>'; 
      } 
       echo '</tr>'; 
      } 
     echo '</table>'; 
+2

Вам не нужно, чтобы связать параметр для пустой строки; а другой должен быть «exam.Level =: level», я думаю. – andrewsi

+4

'WHERE exam.Level =: level' –

+0

И я не вижу заполнитель': centre' в вашем запросе ... – prodigitalson

ответ

0

Я новичок в PDO, а также, но из вашего кода я заметил, что в запросе нет :centre, чтобы параметр не связывался?

Другое дело в WHERE exam.Level:level, вы уверены, что имеете в виду это, а не: WHERE exam.Level = :level?

+0

Спасибо. Я поменял на 'exam.Level =: level', но он все равно не работает. И как использовать параметр для пустой строки? например 'exam.Centre! = ''' – Benjamin

3

Простой учебник для вас, чтобы все было правильно.

  1. Возьмите запрос MySQL, который работает

    $sql = "SELECT * FROM t WHERE a = $a AND b = '$b'"; 
    
  2. Сделать уверен это работает. Если нет - сделайте это первым.
  3. Возьмите каждый переменное вы интерполировать в нем (вместе с всех соответствующего форматирования, в том числе косых черт и кавычки), и поставить знак вопроса вместо них.

    $sql = "SELECT * FROM t WHERE a = ? AND b = ?"; 
    
  4. Переместить эти переменные в execute() в виде массива

    $sql = "SELECT * FROM t WHERE a = ? AND b = ?"; 
    $stm = $db->prepare($sql); 
    $stm->execute(array($a,$b)); 
    
  5. Все работает.

  6. Если все еще нет - configure your PDO and PHP in order to see errors if any, прочитайте сообщение об ошибке и предпримите соответствующие действия.

Чтобы получить данные в нужном формате, вы должны использовать правильные выборки методы

 $data = $stm->fetchAll(); 
    foreach ($data as $row) { 
     echo $row['id']; 
     // do whatever 
    } 

Пожалуйста, обратитесь к tag wiki for other methods

+0

Кроме того, если для параметра 'ATTR_EMULATE_PREPARES' установлено значение' true', вы можете использовать [PDOStatement :: debugDumpParams] (http://www.php.net/manual/en/pdostatement.debugdumpparams.php) ** после ** 'execute()'. – Jimbo

+0

Спасибо. Я получил его для запуска, но он показывает только первую запись в базе данных. Конечно, мне не нужно цитировать, чтобы показать ВСЕ записи, соответствующие критериям? – Benjamin

+0

@ user2304574 просто используйте правильный метод извлечения. Чтобы получить все записи, вы должны использовать '$ stmt1-> fetchAll()' вместо fetch(), который получает только одну запись –

Смежные вопросы