如何从mySQL数据库创建一个数组?

时间:2016-03-30 09:56:54

标签: php arrays pdo

$sql = "SELECT name FROM people WHERE id = '$id'";  
$array = array();       
$q = $pdo->prepare($sql);
$q->execute();
foreach ($pdo->query($sql) as $row) {
$array[] = $row;
}

我的结果是:

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(4) "fred"
    [0]=>
    string(4) "fred"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(3) "sam"
    [0]=>
    string(3) "sam"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(4) "alan"
    [0]=>
    string(4) "alan"
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(63) "john"
    [0]=>
    string(63) "john"
  }
}

但我需要:

Array
(
    [fred] => fred
    [sam] => sam
    [alan] => alan
    [john] => john
)

我试过例如:

foreach ($pdo->query($sql) as $key => $row) {..

以及

foreach ($pdo->query($sql) as $row) {
$array[] = $row;
$row = array_combine(array_values($row), array_values($row));
}

但我总能得到相同的结果......

3 个答案:

答案 0 :(得分:4)

使用 fetchAll

$q = $pdo->prepare($sql);
$q->execute();
$result = $q->fetchAll();
print_r($result);

答案 1 :(得分:1)

使用fetchAll()

但不是一个香草的,而是一个名为PDO::FETCH_COLUMN的秘密论据

$sql = "SELECT name FROM people WHERE id = ?";  
$q = $pdo->prepare($sql);
$q->execute([$id]);
$array = $q->fetchAll(PDO::FETCH_COLUMN);

它将为您提供一个名称如此

的单维数组
Array
(
    [0] => fred
    [1] => sam
    [2] => alan
    [3] => john
) 
  

请注意,您使用的是准备好的语句完全错误的方式使您的代码容易受到SQL注入攻击。它在上面的代码中修复。

如果您坚持同时获取密钥和值,请按以下步骤更改代码

$sql = "SELECT name, name FROM people WHERE id = ?";  
$q = $pdo->prepare($sql);
$q->execute([$id]);
$array = $q->fetchAll(PDO::FETCH_KEY_PAIR);

它会按照你的要求给你准确的数组

答案 2 :(得分:0)

进行以下更改:

Red