2016-08-05 3 views
0

У меня есть раскрывающийся список с несколькими вариантами. Выпадающий выглядит следующим образом:PDO FetchAll возвращает пустой массив, но есть значение в db

<select multiple class="form-control" name="batch_no[]" id="batch_no" required onchange="getBatchCourseDetail();"> 
<option value="">-----------Select Your Batch----------</option> 
<?php 
foreach ($result as $res) 
{ 
    ?> 
    <option value="<?php echo $res['batch_code']; ?>"><?php echo $res['batch_code']; ?></option> 
<?php 
} ?> 
</select> 

В OnChange вызове функции У меня есть сценарий, как это:

function getBatchCourseDetail() 
{ 
    var other = String($('#batch_no').val()); 
    var opts = [], 
    opt; 
    var split1 = other.split(','); 
    for (var i = 0; i < split1.length; i++) 
    { 
     opt = split1[i]; 
     opts.push(opt); 
    } 
    $.ajax({ 
     url: 'course_apply_batch_course_detail_ajax.php', 
     type: 'POST', 
     data: 
     { 
     batch_code: opts 
     }, 
     success: function (data) 
     { 
     //console.log(data); 
     $('#batch_information_autofill').html(data); 
     } 
    }); 
} 

В АЯКС файл, который находится в course_apply_course_detail_ajax.php странице я получить все значения падения вниз .

course_apply_course_detail_ajax.php:

<?php 
require('classes/autoloader.php'); 
$course_apply = new \Model\CourseApplyModel(); 
$batch_code111=array(); 
$batch_code111 = $_POST['batch_code']; 
$batch_code1 ="'" .implode("','",$batch_code111) ."'"; 

$parameter = array(
    "batchcode" => $batch_code1, 
    "status" => 0); 

$result11 =$course_apply->getBatchCourseDetail11($parameter); 

echo"<pre>"; 
print_r($result11); 
echo"</pre>"; 
exit; 
?> 

Я буду получать значения в $ batch_code1 как: 'LATS-CHMB-1000', 'LATS-SA-1000', 'LATS-абсолютная ошибка-1003', которая является хранится в переменной массива «batchcode».

В модели Мой запрос выглядит следующим образом:

public function getBatchCourseDetail11($parameter) 
{ 
/* $QUERY1="SELECT start_date,end_date,course_code FROM batch WHERE 
    batch_code IN('LATS-CHMB-1000','LATS-SA-1000','LATS-ABSE-1003') AND status =0"; */ 

    $query1="SELECT start_date,end_date,course_code FROM batch WHERE status =:status AND batch_code IN(:batchcode)"; 
    try{ 
     $result1=$this->dbh->prepare($query1); 
     $result1->execute($parameter); 
     $data11=$result1->fetchAll(\PDO::FETCH_ASSOC); 
     return $data11; 
    } 
    catch(\PDOException $e) 
    { 
     print_r($e); 
     return false; 
    } 

} 

Когда я пытаюсь напечатать возврата данных я получаю массив(), но запрос корректно выполняется в PHPMyAdmin.

Заранее спасибо, пожалуйста, помогите мне решить эту проблему.

+0

Для чего вы используете escape-косую черту? –

+0

@ Maksim.T Вы имеете в виду эту строку: $ course_apply = new \ Model \ CourseApplyModel(); Его создать объект для класса. – user12688

+0

Нет, я имею в виду, когда вы формируете свои массивы с PDO и обнаруживаете исключение. То есть catch (\ PDOException $ e) –

ответ

0

Запрос Ваш вопрос

$query1="SELECT start_date,end_date,course_code 
     FROM batch 
     WHERE status =:status 
      AND batch_code IN(:batchcode)"; 

не представляется возможным заменить произвольную часть запроса с заполнителем. Поэтому для разделяемых запятыми заполнителей, таких как IN(), вы должны создать набор из? Вручную вручную и поместить их в запрос:

Короче говоря, мы должны создать синтаксис, например IN(?,?,?), если у вас есть 3 значения, которые вы хотите в вашем списке IN(), а затем передайте 3 пареметра для подготовки.

public function getBatchCourseDetail11($parameter) 
{ 
    // generate the number of ? we need 
    $ins = str_repeat('?,', count($parameter['batchcode']) - 1) . '?'; 

    $query1="SELECT start_date,end_date,course_code 
      FROM batch 
      WHERE status = ? 
       AND batch_code IN($ins)"; 
    try{ 
     $result1=$this->dbh->prepare($query1); 

     $params[] = $parameter['status']; 
     foreach ($parameter['batchcode'] as $p) { 
      $params[] = $p; 
     } 

     $result1->execute($params); 

     $data11=$result1->fetchAll(\PDO::FETCH_ASSOC); 
     return $data11; 
    } 
    catch(\PDOException $e) { 
     print_r($e); 
     return false; 
    } 

} 
+0

Я скопировал и использовал предоставленный вами код, но все же пустой массив - это то, что я получаю. Я могу заверить вас, что у меня есть значения в db. Я проверил запрос с помощью PHPmyadmin, и я могу получить эти значения успешно. – user12688

+0

Вы уверены, что вы установили PDO в режим исключения, может быть немного синтаксиса opps. Я не могу проверить это прямо сейчас. $ Conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION) ' – RiggsFolly

+0

код, который вы предоставили, - это правый, он не показывает ошибки, но возвращает пустое. – user12688

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