2014-10-05 120 views
0

PHP PDO MSSQL準備我在使用基於功能的PDO麻煩聲明

GetCurrentLanguage()函數返回0 int或1

public function GetCurrentLangName() 
{ 
    $stmt = $GLOBALS['website']->prepare("SELECT * FROM available_languages WHERE id = :id"); 
    $stmt->bindParam(':id', $this->GetCurrentLanguage(), PDO::PARAM_INT); 

    $stmt->execute(); 
    $fetch = $stmt->fetchAll(); 
    return $fetch['name']; 
} 

,並不能正常工作,它返回

注意:未定義指數:命名

+0

你可以[檢查手冊](http://php.net/manual/en/pdostatement.fetchall.php)或'var_dump($ fetch)'看看會發生什麼......在你的情況下,'fetchAll'將所有rowS作爲數組返回,所以它是一個數組數組。您可能需要使用'$ fetch [0] ['name']'(如果您確定至少會返回一行)。 – Passerby 2014-10-05 02:49:28

回答

2

如果你EXP影響許多行,你可以循環它。

public function GetCurrentLangName() 
{ 
    $data = array(): 
    $stmt = $GLOBALS['website']->prepare("SELECT * FROM available_languages WHERE id = :id"); 
    $stmt->bindParam(':id', $this->GetCurrentLanguage(), PDO::PARAM_INT); 

    $stmt->execute(); 
    $fetch = $stmt->fetchAll(PDO::FETCH_ASSOC); 

    foreach($fetch as $row) { 
     $data[] = $row['name']; 
    } 
    return $data; 
} 

該函數(->fetchAll())返回一個多維數組。可能看起來像這樣:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => lang 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => lang 
     ) 
) 

也可以使用上$fetchprint_r()/var_dump(),你會看到它產生。

+0

它返回字符串「數組」 – user3811098 2014-10-05 03:26:46

+0

@ user3811098是的,這就是它!因爲它不是一個字符串!它的一個數組,使用'print_r()',你會看到! – Ghost 2014-10-05 03:29:21

+0

well ty,但它似乎返回Array()1,可能是我的數據庫連接有問題?我如何檢查錯誤? – user3811098 2014-10-05 03:39:39

0

您應該將參數設置爲要綁定的參數。

public function GetCurrentLangName($id) 
{ 
    $stmt =  $GLOBALS['website']- >prepare("SELECT * FROM  available_languages WHERE id = :id"); 
    $stmt->bindParam(':id', $id,  PDO::PARAM_INT); 

$stmt->execute(); 
$fetch = $stmt->fetchAll(); 
return $fetch['name']; 

}

+0

確實,但參數是$ this-> GetCurrentLanguage(),它不能這樣工作? 編輯:試過這種方式,但問題persistists – user3811098 2014-10-05 03:31:13

0

fetchAll()回報二維數組這樣的,而不是返回$fetch['name'];應該 return $fetch[0]['name'];或更好地利用fetch返回單行:

$fetch = $stmt->fetch(); 
return $fetch; 

然後使用函數這樣:

$data = GetCurrentLangName(); 
$language = $data['name']; 
+0

注意:未定義的偏移量:0爲$ fetch [0] ['name']; 和空的結果,當我只是使用返回$ fetch – user3811098 2014-10-05 03:30:04

+0

仔細閱讀我的答案,如果您使用抓取你不需要使用0索引。請閱讀 – meda 2014-10-05 03:32:46

+0

如果您使用fetchall,您將需要它,所以我建議您使用fetch() – meda 2014-10-05 03:33:38