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

标签 php html mysql pdo prepared-statement

我正在尝试编写一个准备好的语句,该语句从一组绑定(bind)字段收集数据并将它们输出到名为 $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 变量从字符串更改为数组。如何绑定(bind)一个数组来处理每条数据,然后将其输出到 $data 数组中?

最佳答案

假设 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

关于php - 如何从准备好的pdo中输出数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493569/

相关文章:

php更改url的数组格式

php - 无法通过PHP代码执行多语句SQL

css - 需要帮助 - 粘性导航栏

php - 求每个学生占所有出勤率的问题

php - 如何使用ajax加载<a href ="">标签的值

javascript - child 的高度限制在 parent 的剩余空间内

mysql - 具有空值的帖子不包含在结果中

sql - 如何填补 MySQL 中的日期空白?

mysql 两个FK在同一个表中

php - 从 PHP 和 MySQL 中的另一个表中排除项目