2015-08-11 2 views
-3

Я пытаюсь преобразовать этот PHP код MySQL из:Преобразование PHP MySQL в PHP PDO

require_once("dbcontroller.php"); 
$db_handle = new DBController(); 
if(!empty($_POST["primary_cat"])) { 
    $query ="SELECT DISTINCT `secondary_cat` FROM student5 WHERE primary_cat = '" . $_POST["primary_cat"] . "'"; 
    $results = $db_handle->runQuery($query); 
    ?> 
    <option value="">Select State</option> 
    <?php 
    foreach($results as $state) { 
     ?> 
     <option value="<?php echo $state["secondary_cat"]; ?>"><?php echo $state["secondary_cat"]; ?></option> 
     <?php 
    } 
} 

в PHP PDO следующим образом. Я не уверен, что я делаю неправильно. Это мой код ниже.

$table = 'student5'; 
include('config.php'); 

if(!empty($_POST['primary_cat'])) { 
$sqlQuerySecondaryCat = $dbh->query("SELECT DISTINCT secondary_cat FROM $table WHERE primary_cat = :primary_cat"); 
$sqlQuerySecondaryCat->execute(array(':primary_cat' => $_POST['primary_cat'])); 

    ?> 
    <option value="">Select State</option> 
    <?php 
    foreach($sqlQuerySecondaryCat as $secondaryCatRow) { 
     ?> 
     <option value="<?php echo $secondaryCatRow["secondary_cat"]; ?>"><?php echo $secondaryCatRow["secondary_cat"]; ?></option> 
     <?php 
    } 
} 

Я получаю следующее сообщение об ошибке в моем error_log PHP Warning: Invalid argument supplied for foreach()

+0

Где вы Экземпляр ваш $ ДВГ? в config.php? – Dave

+0

его в другом исходном файле config.php – xltmt

ответ

0

Прежде всего вам нужно использовать prepare, не query.

$sqlQuerySecondaryCat->prepare("SELECT ....... 

Во-вторых, вы не сделали ничего с данными, хранящимися в объекте $sqlQuerySecondaryCat - вам нужно использовать fetch или fetchAll для данных.

$data = $sqlQuerySecondaryCat->fetchAll(PDO::FETCH_ASSOC); 

foreach($data as $secondaryCatRow){ 
    .... do something 

Полный код:

$table = 'student5'; 
include('config.php'); 

if(!empty($_POST['primary_cat'])) { 
    $sqlQuerySecondaryCat = $dbh->prepare("SELECT DISTINCT secondary_cat FROM $table WHERE primary_cat = :primary_cat"); 
    $sqlQuerySecondaryCat->execute(array(':primary_cat' => $_POST['primary_cat'])); 
    $rows = $sqlQuerySecondaryCat->fetchAll(PDO::FETCH_ASSOC); ?> 
    <option value="">Select State</option> 
    <?php foreach($rows as $secondaryCatRow) { ?> 
     <option value="<?php echo $secondaryCatRow["secondary_cat"]; ?>"><?php echo $secondaryCatRow["secondary_cat"]; ?></option> 
    <?php } 
} 
+0

Спасибо, что работа. Пожалуйста, почему вы использовали 'fetchAll (PDO :: FETCH_ASSOC)' – xltmt

+0

'fetch()' получает данные для следующей строки в виде массива. 'fetchAll()' получает данные для ВСЕХ полученных строк в виде массива. 'fetchAll (PDO :: FETCH_ASSOC)' получает данные в виде массива с именами столбцов для ключей. http://php.net/manual/en/pdostatement.fetchall.php. Я рад, что смогу помочь - если это сработает, не забудьте принять в качестве ответа! – Ben