如何从准备好的pdo输出数组

时间:2014-02-01 02:51:52

标签: php html mysql pdo prepared-statement

我正在尝试编写一个预准备语句,该语句从一组绑定字段中收集数据并将它们输出到名为$data的数组变量。

global $db;
$user_id = (int)$user_id;
$fields = 'field1, field2, field3';
$stmt = $db->prepare("SELECT :fields FROM users WHERE user_id = :user_id");
$stmt->bindValue(':user_id', $user_id);
$stmt->bindValue(':fields', $fields);
$stmt->execute();
$result = $stmt->fetchall();

foreach ($result as $row) {
    $data[] = array(
        'field1' => $row['field1'], 
        'field2' => $row['field2'], 
        'field3' => $row['field3']
    );
}

print_r($data);

然而,我所得到的只是......

Notice: Undefined index: field1 in C:\\\\\\.php on line #
Notice: Undefined index: field2 in C:\\\\\\.php on line #
Notice: Undefined index: field3 in C:\\\\\\.php on line #
Array ( [field1] => [field2] => [field3] => )

这里是vardump(注意,这里的代码是我代码的副本..转储是一个副本,并删除了字段名称。)

array(1) { [0]=> array(2) { ["field1, field2, field3"]=> string(22) "field1, field2, field3" [0]=> string(22) "field1, field2, field3" } } Array ( [field1] => [field2] => [field3] => )

这可能很简单..但我正处于从错误中吸取教训的那一刻。

另外,我想将$field变量从字符串更改为数组。我怎么能绑定一个处理每个数据的数组,然后将它输出到$data数组?

3 个答案:

答案 0 :(得分:1)

假设user_id是主键,那么不需要foreach循环

$fields = 'field1, field2, field3';
$stmt = $db->prepare("SELECT $fields FROM users WHERE user_id = ?");
$stmt->execute(array(1));
$result = $stmt->fetch(PDO::FETCH_ASSOC); 

$data = array(
    'field1' => $result['field1'], 
    'field2' => $result['field2'], 
    'field3' => $result['field3']
);

print_r($data);

我的意思是,如果两个用户可以拥有相同的ID

,为什么会有user_id

答案 1 :(得分:0)

尝试这样做:

$result = $stmt->fetch(PDO::FETCH_ASSOC);

如果您想使用字段名称作为键,则需要使用PDO::FETCH_ASSOC

我不知道您尝试输出的确切格式,但每次foreach循环循环时,都会覆盖$ data数组。

如果您只拉一条记录(它看起来像是这样),您不需要循环,只能输出数组。

$result = $stmt->fetch(PDO::FETCH_ASSOC);

    $data = array(
        'field1' => $result['field1'], 
        'field2' => $result['field2'], 
        'field3' => $result['field3']
    );

print_r($data);

答案 2 :(得分:0)

首先,该方法名为fetchAll,在这种情况下无关紧要,因为您使用的ID可能导致一个返回的行而不是更多。在这种情况下,您应该使用fetch来检索结果。此外,您必须以您希望获取数组的形式说明。你想要一个关联数组(在这种情况下你做),数字?然后在fetch方法内部,您需要指定一个PDO常量来指定数组类型(PDO::FETCH_ASSOC)。

也不需要像你那样绑定字符串,将字段名称直接放在查询中是安全的。

$stmt = $db->prepare("SELECT field1, field2, field3 FROM users WHERE user_id = 1");
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

$data = array(
    'field1' => $row['field1'], 
    'field2' => $row['field2'], 
    'field3' => $row['field3']
);

print_r($data);