2017-05-24 170 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));' –