donglian1982 2016-03-30 09:56
浏览 184
已采纳

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

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

My result is:

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"
  }
}

But I would need:

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

I tried for example:

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

and also

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

but I always get the same result...

  • 写回答

3条回答 默认 最新

  • dousuochu7291 2016-03-30 10:33
    关注

    Use fetchAll()

    But not a vanilla one but with a secret argument called PDO::FETCH_COLUMN

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

    It will get you a single-dimensional array with names like this

    Array
    (
        [0] => fred
        [1] => sam
        [2] => alan
        [3] => john
    ) 
    

    Note that you are using prepared statements completely wrong way making your code vulnerable to SQL injection. It is fixed in the code above.

    If you insists on getting both key and value, then change your code as follows

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

    and it will give you exact array as you asked

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 通联支付网上收银统一下单接口
  • ¥15 angular有偿编写,
  • ¥15 VB.NET使用保存对话框保存图片?
  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应