MySQL为每个请求的字段返回2个值

时间:2015-04-09 19:31:04

标签: php mysql pdo

使用select语句执行query()时,结果包含两个字段条目。

$sql = "select first_name, last_name from users";
$rslt = $conn->query($sql);

在上面的例子中,结果将包含数组中的4个项目。 2,键的递增整数,一个键设置为“first_name”,另一个键设置为“last_name”。

Array ( [first_name] => Bill [0] => Bill [last_name] => Johnson [1] => Johnson )

我确定这是一个愚蠢的问题,但有一种快速方法可以更改返回结果的方式,因此它只包含每个字段的一个键=>值,或者有一种方法可以快速删除额外的数据?

我想要的最终阵列是两件事之一......

必填结果1

Array ( [first_name] => Bill [last_name] => Johnson )

必填结果2

Array ( [0] => Bill [1] => Johnson )

提前致谢。

3 个答案:

答案 0 :(得分:2)

如果您使用的是PDO,则可以设置提取模式

$rslt = $conn->query($sql, PDO::FETCH_ASSOC);

默认返回两种类型。

有关详细信息,请参阅http://php.net/manual/en/pdo.query.php

答案 1 :(得分:1)

您可以将第二个参数传递给query()以更改模式。在您的情况下PDO::FETCH_ASSOCPDO::FETCH_NUM。我假设默认值为PDO::FETCH_BOTH,它在结果数组中创建索引和列名称。

答案 2 :(得分:1)

查看 fetch_style 下的 fetch 手册:

  

PDO :: FETCH_ASSOC:返回由返回的列名索引的数组   在结果集中

     

PDO :: FETCH_BOTH(默认值):返回由两列索引的数组   结果集中返回的名称和0索引列号

     

PDO :: FETCH_BOUND:返回TRUE并分配列的值   在您的结果集中绑定到它们的PHP变量   PDOStatement :: bindColumn()方法

     

PDO :: FETCH_CLASS:返回所请求类的新实例,   将结果集的列映射到。中的命名属性   类。如果fetch_style包含PDO :: FETCH_CLASSTYPE(例如   PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE)然后是类的名称   根据第一列的值确定。

     

PDO :: FETCH_INTO:更新所请求类的现有实例,   将结果集的列映射到类

中的命名属性      

PDO :: FETCH_LAZY:组合PDO :: FETCH_BOTH和PDO :: FETCH_OBJ,创建   访问时的对象变量名称

     

PDO :: FETCH_NAMED:返回一个格式相同的数组   PDO :: FETCH_ASSOC,除非有多个列   同名,该键引用的值将是所有的数组   具有该列名称的行中的值

     

PDO :: FETCH_NUM:返回由返回的列号索引的数组   在结果集中,从第0列开始

     

PDO :: FETCH_OBJ:返回一个具有属性名称的匿名对象   对应于结果集中返回的列名

你想要的是适当的获取方式而不是PDO::FETCH_BOTH(默认)作为fetch()的第一个参数。

您要做的是使用query()返回的 PDOStatement 对象。

$sql = "select first_name, last_name from users";
$stmt = $conn->query($sql);
$num = $stmt->fetchAll(PDO::FETCH_NUM);
$assoc = $stmt->fetchAll(PDO::FETCH_ASSOC);

我相信这会有效,但我没有测试fetchAll是否可以在同一个语句中运行两次。