2016-09-21 81 views
1

在這種情況下,例如,
我從person_code => 1,2,3
數組中的字符串然後我想要將該字符串從person_nama => name1,name2 ,NAME3
我有嘗試用我的代碼:
PHP重寫數組到字符串,

public function Person_name($person_code) 
    { 
     $code= explode(',', $person_code); 
     $name=array(); 
     for($i=0; $i<count($code); $i++){ 
      $sql= Yii::app()->db->createCommand('select nm_person from tbl_person where kd_person="'.$code[$i].'";'); 
      $name=$sql->queryRow(); 
     } 
     $namearray= implode(',',$name); 
     return $namaarray; 
    } 


但該結果僅在數組中返回的最後一個人的名字,
有人能幫助我嗎?謝謝

+1

你覆蓋它,'$名稱[] =',不斷地推,爲什麼不直接使用WHERE' IN'子句中,我確定'Yii'已經在某個地方使用API​​,它接受一個'WHERE IN'子句方法,並且接受一個整數數組 – Ghost

回答

1

我只是通過使用創可貼解決方案來回答這個問題,只是通常會將結果推送到數組中。您目前的代碼只是覆蓋$name

$name[] = $sql->queryRow(); 

但是。

不要直接插入變量到查詢字符串中。只要停下來,你已經在使用有用的查詢生成器來使用一個好的框架。

爲了不爲每個id執行每個查詢,爲什麼不使用WHERE IN子句風格與構建器一起使用。

好多了未經測試的基本思想是:

public function Person_name($person_code) 
{ 
    $persons = array(); 
    $person_code = explode(',', $person_code); 

    if(!empty($person_code)) { 
     $result = Yii::app()->db->createCommand() 
     ->setFetchMode(PDO::FETCH_COLUMN, 0) 
     ->select('nm_person') 
     ->from('tbl_person') 
     ->where(array('IN', 'kd_person', $person_code) 
     ->queryAll(); 

     $persons = implode(', ', $result); 
    } 

    return $persons; 
} 

基於閱讀manual

+0

謝謝你的迴應,這是個好主意,我有嘗試你的代碼,但陣列Helper.php中的任何錯誤,我認爲這是因爲我使用Yii 1.xx –

+0

@YanuarIhsan哦好吧,那就是爲什麼,我已經改變它到那個你正在使用的版本,我已編輯它 – Ghost

+0

它的工作,好主意......謝謝@Ghost –