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

Php 为什么PDO返回两个数组键?,php,pdo,Php,Pdo,我正在PDO中使用一个简单的SELECT: $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); 为什么

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

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

这是因为PDO默认为
PDO::FETCH_BOTH
,如果您只希望字段名作为键,请使用
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);
$row=$statement->fetch(PDO::fetch\u 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);

这是因为PDO默认为
PDO::FETCH_BOTH
,如果您只希望字段名作为键,请使用
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);
$row=$statement->fetch(PDO::fetch\u 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);

请参阅PDO获取的选项:


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

请参见PDO FETCH的选项:


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

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

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

PDOStatement::fetch
的默认值是
PDO::fetch\u BOTH
。这意味着您可以通过“名称”和“索引”访问数据。 如果只需要关联版本,请使用以下选项:

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

您需要指定
$row=$statement->fetch(PDO::fetch\u ASSOC)

与您的问题无关,只是一些可靠的建议,告诉您使用大写字母作为单词(如SELECT和FROM以及WHERE等)是一种很好的做法。它只会使阅读变得更容易,并将其与查询区分开来。以后你可能会为此感谢我;-)^这完全是个人的风格偏好。如果你为一家公司或一个已建立的项目写作,只需遵循现有的惯例即可。就我个人而言,我是用小写字母写的。@JoeFrambach我同意这些观点。它只是让“我”有时更容易区别于可能很长的代码行,而且从我在MySQL网站上看到/收集的内容来看,它们都是大写的。是的,这是个人品味/写作形式的问题。“只要我的2美分”。这与你的问题无关,只是一些很好的建议,比如在单词中使用大写字母是一种很好的做法,例如SELECT和FROM以及WHERE等。这只会使它更容易阅读,并将其与查询区分开来。以后你可能会为此感谢我;-)^这完全是个人的风格偏好。如果你为一家公司或一个已建立的项目写作,只需遵循现有的惯例即可。就我个人而言,我是用小写字母写的。@JoeFrambach我同意这些观点。它只是让“我”有时更容易区别于可能很长的代码行,而且从我在MySQL网站上看到/收集的内容来看,它们都是大写的。是的,这是个人品味/写作形式的问题。“只要我的2美分”。