2014-10-05 115 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