2016-08-05 104 views
0

我有一个包含多个select的下拉框。下拉看起来是这样的:PDO FetchAll返回一个空数组,但数据库中存在值

<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> 

在平变化的函数调用我有这样的脚本:

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); 
     } 
    }); 
} 

在AJAX文件,是在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-ABSE-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

你在使用换码反斜杠吗? –

+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()),必须手动创建一组?,并将它们放入查询中:

总之,如果您有3个想要的值,我们必须创建一个语法,如IN(?,?,?)在您的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

我复制并使用你提供的代码,但仍然是一个空数组是我得到的。我可以向你保证,我有数据库中的值。我用PHPmyadmin检查了查询,我可以成功获取这些值。 – user12688

+0

你确定你已经将PDO设置为异常模式,可能有一点语法opps我现在不能测试这个'$ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION)' – RiggsFolly

+0

你提供的代码是正确的一个它显示没有错误,但返回空。 – user12688