2015-03-29 2 views
1

Я пытаюсь создать раскрывающийся список с параметрами (жанрами) из моей базы данных. Например, если у меня есть комедия, триллер и действие в моей базе данных, эти жанры будут доступны в качестве опций в моем выпадающем списке. В основном, что происходит, я получаю пустой список без параметров, и мне было интересно, есть ли какие-либо проблемы с моим кодом. Заранее спасибо.Не удается получить доступ к полученным данным из запроса PDO

<?php 

    $sql = 'SELECT DISTINCT Genre.name FROM (Genre JOIN Movie2Genre ON Genre.id = Movie2Genre.idGenre)'; 
    $stmt = $db3->prepare($sql); 
    $stmt->execute(); 

    $allGenre = $stmt->fetchAll(); 


    echo "<select>"; 
    foreach ($allGenre as $val){ 
     echo "<option value='{$val["name"]}'>{$val["name"]}</option>"; 
    } 
    echo "</select>"; 

?> 
+0

И ваш вопрос? – Rizier123

+0

Так оно работает или нет? –

+0

В основном это не отображает ничего внутри выпадающего списка. Поэтому мне было интересно, что-то не так с моей кодировкой. – Sekai

ответ

0

Как оказалось, в comments вы устанавливаете режим выборки по умолчанию с помощью setAttribute(). Таким образом, вы запрашиваете данные как объект, а не как массив, как это было бы нормально, с этим:

$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 

Также цитата из manual, где он говорит, что режим, который по умолчанию:

PDO::FETCH_BOTH (default): returns an array indexed by both column name and 0-indexed column number as returned in your result set

Таким образом, вместо этой структуры:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [0] => 1 
      [number] => 3234 
      [1] => 3234 
      [text] => sdfdsf 
      [2] => sdfdsf 
      [texttext] => sdfsdf 
      [3] => sdfsdf 
     ) 
    //... 

у вас есть структура вроде этого:

Array 
(
    [0] => stdClass Object 
     (
      [id] => 1 
      [number] => 3234 
      [text] => sdfdsf 
      [texttext] => sdfsdf 
     ) 
    //... 

Таким образом, вы должны использовать -> для доступа к свойству объекта, как это:

$val->name 

Боковые Примечания:

Кроме того, если бы вы добавили error reporting (только во время проведения, никогда в производстве!):

<?php 
    ini_set("display_errors", 1); 
    error_reporting(E_ALL); 
?> 

Вы получили бы такую ​​ошибку:

Fatal error: Cannot use object of type stdClass as array

И я бы порекомендовал вам enable error mode для подключения к PDO (просто поставить его сразу после заявления подключения):

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Затем вы можете поместить свой материал db в блок try & catch, чтобы поймать PDOExceptions:

try { 
    //db stuff 
} catch(PDOException) { 
    echo $e->getMessage(); 
} 
0

Учитывая текущий код, мы можем констатировать, что

  1. вы ничего не делаете с $genre - вы выводя <option> элементы
  2. не может быть каких-либо жанров (т.е. $genre является не установлены)

Если 1 истинно, Рассмотреть вопрос о размещении explode 'd/смежное значение $genre в приложении <select>docs тег.

В случае 2 выбор будет пустым. Поскольку ваш вопрос не содержит конкретного кода для вывода выбора, трудно сказать, в чем проблема. В вашем вопросе говорится: «Я не могу выбрать (drop)», поэтому может быть даже JavaScript, изменяющий активированный атрибут выбранного (если таковой) выбранного.

+0

Извините за то, что вы сбиваете с толку. Когда я сказал, что не могу выбрать, я действительно имел в виду, что не было никаких вариантов: =) – Sekai

+0

$ genre не пуст, так как я использую ту же самую статью SQL в другом месте на моем сайте. – Sekai

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