【问题标题】:Create single array from MySQL with PHP/PDO使用 PHP/PDO 从 MySQL 创建单个数组
【发布时间】:2018-08-27 16:07:13
【问题描述】:

我正在尝试从一个包含几行的 db 表创建一个数组,例如:

--------------
id   |   name
--------------
1    | value 1
2    | value 2
3    | value 3
--------------

我希望创建的数组尽可能简单,例如 value1,value2,value3

我正在使用这个功能

function getAll()
    {
        //select all data
        $sql = "SELECT name FROM " . $this->table_name . "  ORDER BY id";

        $prep_state = $this->db_conn->prepare($sql);
        $prep_state->execute();

        $row = $prep_state->fetch(PDO::FETCH_ASSOC);
        $this->name = $row['name'];
    }

有没有一种简单的方法可以做到这一点,也许使用另一种 PDO 模式,例如使用 PDO::FETCH_UNIQUE 完成,或者应该采取不同的方法?

更新 - 这样就成功了(感谢@u_mulder

function getAll()
{
    $sql = "SELECT name FROM " . $this->table_name . "  ORDER BY id";
    $prep_state = $this->db_conn->prepare($sql);
    $prep_state->execute();

    $names = $prep_state->fetchAll(PDO::FETCH_COLUMN, 0); 
    return(implode(",",$names));

}

【问题讨论】:

  • 这里的Create single array 是什么意思?
  • 一维...像数组(value1,value2,value3);
  • 既然要返回所有行,为什么不使用fetchAll 而不是fetch
  • 是的,fetchAll 做到了。谢谢

标签: php arrays pdo


【解决方案1】:

你需要的是PDO::FETCH_COLUMN模式:

$sql = "SELECT name FROM " . $this->table_name . "  ORDER BY id";
$prep_state = $this->db_conn->prepare($sql);
$prep_state->execute();

// 0 indicates first column of result
$names = $prep_state->fetchAll(PDO::FETCH_COLUMN, 0); 
print_r($names);
// then do what you want.

【讨论】:

  • 非常感谢。有效。而不是 print_r 我只是添加了 return(implode(",",$names));
【解决方案2】:

如果你想要一个数组中的所有名称,你可以尝试 group_concat 并分解

function getAll()
{
    //select all data
    $sql = "SELECT group_cancat(name) name FROM " . $this->table_name . "  ORDER BY id";

    $prep_state = $this->db_conn->prepare($sql);
    $prep_state->execute();

    $row = $prep_state->fetch(PDO::FETCH_ASSOC);

    // build an array from the concatenated  string pf names 
    $myArray = explode(',',  $row['name']);

    return $myArray;
}

【讨论】:

    【解决方案3】:

    使用返回数组的 fetchAll 方法,然后将数组返回到您可以使用的变量中。

    function getAll()
        {
            //select all data
            $sql = "SELECT name FROM " . $this->table_name . "  ORDER BY id";
    
            $prep_state = $this->db_conn->prepare($sql);
            $prep_state->execute();
    
            $row = $prep_state->fetchAll(); //changed this
            $return $row; //and this
        }
    

    然后从这个数组中取出值。

    foreach($row as $key=>$value) {
    //echo your results
    }
    

    键是 id,值是名称。

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      相关资源
      最近更新 更多