使用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 )
提前致谢。
答案 0 :(得分:2)
如果您使用的是PDO,则可以设置提取模式
$rslt = $conn->query($sql, PDO::FETCH_ASSOC);
默认返回两种类型。
有关详细信息,请参阅http://php.net/manual/en/pdo.query.php
答案 1 :(得分:1)
您可以将第二个参数传递给query()
以更改模式。在您的情况下PDO::FETCH_ASSOC
或PDO::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是否可以在同一个语句中运行两次。