为什么PDO返回两个数组键?

时间:2013-06-19 13:52:56

标签: php pdo

我在SELECT中使用了一个简单的PDO

$status = 'subscribed';
$statement = $pdo->prepare("select id_user from user where status = :status");
$statement->bindParam(':status', $status);
$statement->execute();
$row = $statement->fetch();
print_r($row);

为什么会回来:

Array ( [id_user] => 9 [0] => 9 )

而不是:

Array ( [id_user] => 9 )

4 个答案:

答案 0 :(得分:4)

那是因为PDO默认为PDO::FETCH_BOTH,如果您只想将字段名作为键,请使用PDO::FETCH_ASSOC

$row = $statement->fetch(PDO::FETCH_ASSOC);

或者将默认提取模式更改为PDO::FETCH_ASSOC

// for the PDO instance (which all pdostatement instances will inherit)
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

// for the PDOStatement instance
$statement->setFetchMode(PDO::FETCH_ASSOC);

答案 1 :(得分:1)

您需要指定     $row = $statement->fetch(PDO::FETCH_ASSOC);

答案 2 :(得分:0)

请参阅PDO fetch的选项:

http://php.net/manual/en/pdostatement.fetch.php

默认为PDO::FETCH_BOTH而不是PDO::FETCH_ASSOC

答案 3 :(得分:0)

PDOStatement::fetch的默认值为PDO::FETCH_BOTH。这意味着您可以通过“名称”和“索引”访问数据。 如果您只想要关联版本,请使用:

$statement->fetch(PDO::FETCH_ASSOC);