php-pdo-mssql准备了语句


php pdo mssql prepared statement

我在使用基于pdo的函数时遇到问题

我的GetCurrentLanguage()函数返回一个0或1 的int

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'];
}

并且不工作,则返回

注意:未定义的索引:名称

如果您期望有很多行,您可以循环它。

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
        )
)

本可以在$fetch上使用print_r()/var_dump(),您将看到它的结果。

您应该将parameter设置为要绑定的参数。

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'];

}

fetchAll()返回二维数组,因此不应返回$fetch['name'];return $fetch[0]['name'];或更好地使用fetch返回单行:

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

然后使用这样的函数:

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