我正在尝试编写一个预准备语句,该语句从一组绑定字段中收集数据并将它们输出到名为$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
数组?
答案 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);