Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php pdo mssql准备语句_Php_Sql Server_Pdo - Fatal编程技术网

php pdo mssql准备语句

php pdo mssql准备语句,php,sql-server,pdo,Php,Sql Server,Pdo,我在使用基于pdo的函数时遇到问题 myGetCurrentLanguage()函数返回0或1的整数 public function GetCurrentLangName() { $stmt = $GLOBALS['website']->prepare("SELECT * FROM available_languages WHERE id = :id"); $stmt->bindParam(':id', $this->GetCurrentLanguage(),

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

my
GetCurrentLanguage()
函数返回0或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'];
}
而且不起作用,它又回来了

注意:未定义索引: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
        )
)
$data  = GetCurrentLangName();
$language = $data['name'];

可以在
$fetch
上使用
print\u r()/var\u dump()
,您将看到它产生了什么。

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

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']应该是
返回$fetch[0]['name']
或更好地使用
fetch
返回单行:

$fetch = $stmt->fetch();
return $fetch;
然后使用如下函数:

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

    [1] => Array
        (
            [id] => 2
            [name] => lang
        )
)
$data  = GetCurrentLangName();
$language = $data['name'];

您可以选择或
var\u dump($fetch)
来查看发生了什么……在您的情况下,
fetchAll
将所有行作为数组返回,因此它是数组的数组。您可能需要使用
$fetch[0]['name']
(当然,如果您确定至少会返回一行),它将返回字符串“Array”@user3811098 yes就是这样!因为它不是一根绳子!这是一个数组,使用
print\r()
,您将看到!嗯,是的,但它似乎返回了Array()1,可能是我的数据库连接出了问题?我怎样才能检查错误?@user3811098可能有很多事情,也许在那个查询上并没有真正的结果,这就是为什么它的emptyNotice:Undefined offset:0 for return$fetch[0]['name'];当我只使用return$fetch时,结果为空。请仔细阅读我的答案。如果使用fetch,则不需要使用0索引。请阅读它如果您使用fetchall您将需要它,所以我建议您确实使用fetch(),但参数是$this->GetCurrentLanguage(),它不能这样工作吗?编辑:试过了,但问题依然存在