2017-05-24 132 views
0

我用这个函数来调用我的数据库使用fetchall(PDO :: FETCH_ASSOC)什么都没有返回

function get_prescriptionWith_4($ID){ 
    $sql = "SELECT prescriptions FROM tblprescriptions WHERE `ID`='$ID'"; 
    $query = $this->dbh->prepare($sql); 
    $query->execute(); 
    $row = $query->fetchAll(PDO::FETCH_ASSOC)); 
    return @$row; 
} 

我的数据库表看起来像这样..

ID |  prescription 
1 | Med (gen) 20 -- #20/1X per day --morning--for 30 days/, 
1 | test (test) 23 -- #343/1X per day --morning and noon-- 120 days23/, 
      samp (rere) 44 -- #34/1X per day --morning-- 7 days44/, 
1 | asd (asd) 22 -- #222/3X per day --morning noon and evening--30 days/, 
      qw (wq) 44 -- #222/3X per day --morning noon and evening--60 days/, 
      1233 (123) 21 -- #123213/1X per day --morning--- 60 days/, 

什么,我想实现的是加载所有处方与相同的ID和自行处方有多个数据里面我用explode来分隔数据,当我试图使用Fetch(PDO::FETCH_ASSOC)我只返回第一个处方,我认为使用fetchAll可能会更好地获取所有数据从我的数据库..

$pres_array3=$patient->get_prescriptionWith_4($ID); 
$new_array3=explode(',',$pres_array3,-1); 

但是当我使用echo $new_array3检查什么都没有回报,如果它是fetchAll

+0

Errrm对不起,这不是一个准备好的声明开始。尽管调试很容易,但是不用返回数据,您可以运行一些错误检查函数来查看是否有任何pdo错误返回 –

+0

@HankyPanky准备好的语句是有效的,OP仅容易受到SQL注入的影响。请改用参数化语句。 –

+0

这实际上是获取(PDO :: FETCH_ASSOC)开始,但我的问题是,如果我使用fetchAll什么都没有被返回,这就是为什么我发布,因为我认为这是我的问题.. –

回答

3

1)你准备的说法是错误的/滥用

$sql = "SELECT prescriptions FROM tblprescriptions WHERE `ID` = :id"; 
$query = $this->dbh->prepare($sql); 
$query->execute([':id' => $ID]); 

2)$query->fetchAll(PDO::FETCH_ASSOC)返回数组,所以$row['prescriptions']不存在,它会抛出未定义索引prescriptions的警告。正确的版本将是

if($row = $query->fetch(PDO::FETCH_ASSOC)){ 
+0

'$ sql =“SELECT处方从tblprescriptions WHERE'ID' =:id”; $ query = $ this-> dbh-> prepare($ sql); $ query-> execute([':id'=> $ ID]); $ row = $ query-> fetchAll(PDO :: FETCH_ASSOC)); return @ $ row;' 是否正确返回所有行数据? –

+0

请不要介意编辑。 +1 –

+0

我真正想要的是获取所有的数据具有相同的ID ..这就是为什么我使用fetchAll的原因,正如你所说我做的方法是不正确的.. –

0

这样以来fetchAll(PDO:ASSOC)给我什么......我用这个办法,而不是..

$prescriptions = array(); 
    while($row = $query->fetch(PDO::FETCH_ASSOC)){ 
     $prescriptions[] = $row; 
    } 
return $prescriptions; 

然后 $pres_array3=$patient->get_prescriptionWith_4($patientID);

<?php 
    foreach ($pres_array3 as $key => $value) { 
     $prescription = $value['prescriptions']; 
     $new_array3=explode(',',$prescription,-1); 
     foreach($new_array3 as $value) {  

?> 
<input type="text" value="<?php echo $value?>" /> 

<?php } } ?> 

我之所以使用多个循环是因为在第一个循环中,我获取所有数组数据,然后将其分解,以分离数据,然后再次循环,因为爆炸返回array不是元素..

+0

仅供参考,此理解不正确* fetchAll(PDO:ASSOC)不给我提供任何*。如果'fetch()'给你一些数据集上的东西,那么100%被保存的'fetchAll()'也会给* * –

+0

你没有得到任何结果的一个原因是这个语句有一个语法错误'$ row = $ query-> fetchAll(PDO :: FETCH_ASSOC));' –