【问题标题】:How get all values in a column using PHP?如何使用 PHP 获取列中的所有值?
【发布时间】:2011-07-10 21:54:23
【问题描述】:

我一直在到处寻找这个,但仍然找不到解决方案:如何从 mySQL 列中获取所有值并将它们存储在数组中?

例如: 表名:客户 列名:ID、名称 # 行数:5

我想获取此表中所有 5 个名称的数组。我该怎么做呢?我正在使用 PHP,我只是想:

SELECT names FROM Customers

然后使用

mysql_fetch_array

将这些值存储在数组中的 PHP 函数。

【问题讨论】:

  • 注意:大多数答案仍然使用旧的 MySQL 函数,这些函数在 PHP 5 中已弃用,并在 PHP 7 中删除,我建议您将接受的答案更改为在最新 PHP 中有效的答案跨度>

标签: php mysql arrays


【解决方案1】:

这是使用PDOmysqli 的简单方法

$stmt = $pdo->prepare("SELECT Column FROM foo");
// careful, without a LIMIT this can take long if your table is huge
$stmt->execute();
$array = $stmt->fetchAll(PDO::FETCH_COLUMN);
print_r($array);

或者,使用 mysqli

$stmt = $mysqli->prepare("SELECT Column FROM foo");
$stmt->execute();
$array = [];
foreach ($stmt->get_result() as $row)
{
    $array[] = $row['column'];
}
print_r($array);

Array
(
    [0] => 7960
    [1] => 7972
    [2] => 8028
    [3] => 8082
    [4] => 8233
)

【讨论】:

  • 最佳答案真的(2020 版)... Année ou je code beaucoup finalement :)
  • 我们不是都@Yves :)
【解决方案2】:

请注意,此答案已过时! 自 PHP7 起,mysql 扩展不再可用。如果你想在 PHP7 中使用旧的 mysql 函数,you will have to compile ext/mysql from PECL. 查看其他答案以获得更多当前解决方案。


这可行,请在此处查看更多文档: http://php.net/manual/en/function.mysql-fetch-array.php

$result = mysql_query("SELECT names FROM Customers");
$storeArray = Array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $storeArray[] =  $row['names'];  
}
// now $storeArray will have all the names.

【讨论】:

  • 嘿!这个热门问题的答案在 PHP 7 中中断,因为不再支持 mysql_*。您能否编辑它以使其使用更现代的 API(PDO 或 MySQLi)?或者,您会反对其他人在其中编辑此信息吗?
【解决方案3】:

我会使用 mysqli 连接来连接到数据库。这是一个例子:

$connection = new mysqli("127.0.0.1", "username", "password", "database_name", 3306);

下一步是选择信息。在你的情况下,我会这样做:

$query = $connection->query("SELECT `names` FROM `Customers`;");

最后我们通过输入将所有这些名称组成一个数组:

$array = Array();
while($result = $query->fetch_assoc()){
    $array[] = $result['names'];
}

print_r($array);

所以我在这段代码中做了什么: 我使用 mysql 查询从表中选择了所有名称。接下来我使用 while 循环来检查 $query 是否有下一个值。如果是这样,while 循环将继续并将该值添加到数组“$array”中。否则循环停止。最后我使用 'print_r' 方法打印数组,这样你就可以看到它一切正常。我希望这会有所帮助。

【讨论】:

    【解决方案4】:

    由于 mysql_* 已被弃用,所以这里是使用 mysqli 的解决方案。

    $mysqli = new mysqli('host', 'username', 'password', 'database');
    if($mysqli->connect_errno>0)
    {
      die("Connection to MySQL-server failed!"); 
    }
    $resultArr = array();//to store results
    //to execute query
    $executingFetchQuery = $mysqli->query("SELECT `name` FROM customers WHERE 1");
    if($executingFetchQuery)
    {
       while($arr = $executingFetchQuery->fetch_assoc())
       {
            $resultArr[] = $arr['name'];//storing values into an array
       }
    }
    print_r($resultArr);//print the rows returned by query, containing specified columns
    

    还有另一种方法可以使用 PDO

      $db = new PDO('mysql:host=host_name;dbname=db_name', 'username', 'password'); //to establish a connection
      //to fetch records
      $fetchD = $db->prepare("SELECT `name` FROM customers WHERE 1");
      $fetchD->execute();//executing the query
      $resultArr = array();//to store results
      while($row = $fetchD->fetch())
      {
         $resultArr[] = $row['name'];
      }
      print_r($resultArr);
    

    【讨论】:

    • 不会为表中的所有行创建一个只有 一个 值的数组,它将是所有 的数组> selected(多维数组而不是二维数组)
    • @FélixGagnon-Grenier 我读错了句子 例如:表名:客户列名:ID,行数:5 这就是为什么添加idname 在我的回答中。但是现在,我已经更正了。谢谢
    【解决方案5】:

    首先,这仅适用于高级开发人员,现在都是 php 初学者,如果您正在使用核心 php 中的大型项目,请不要使用此功能,请使用此功能

    function displayAllRecords($serverName, $userName, $password, $databaseName,$sqlQuery='')
    {
        $databaseConnectionQuery =  mysqli_connect($serverName, $userName, $password, $databaseName);
        if($databaseConnectionQuery === false)
        {
            die("ERROR: Could not connect. " . mysqli_connect_error());
            return false;
        }
    
        $resultQuery = mysqli_query($databaseConnectionQuery,$sqlQuery);
        $fetchFields = mysqli_fetch_fields($resultQuery);
        $fetchValues = mysqli_fetch_fields($resultQuery);
    
        if (mysqli_num_rows($resultQuery) > 0) 
        {           
    
            echo "<table class='table'>";
            echo "<tr>";
            foreach ($fetchFields as $fetchedField)
             {          
                echo "<td>";
                echo "<b>" . $fetchedField->name . "<b></a>";
                echo "</td>";
            }       
            echo "</tr>";
            while($totalRows = mysqli_fetch_array($resultQuery)) 
            {           
                echo "<tr>";                                
                for($eachRecord = 0; $eachRecord < count($fetchValues);$eachRecord++)
                {           
                    echo "<td>";
                    echo $totalRows[$eachRecord];
                    echo "</td>";               
                }
                echo "<td><a href=''><button>Edit</button></a></td>";
                echo "<td><a href=''><button>Delete</button></a></td>";
                echo "</tr>";           
            } 
            echo "</table>";        
    
        } 
        else
        {
          echo "No Records Found in";
        }
    }
    

    现在全部设置 将参数传递为 For Example

    $queryStatment = "SELECT * From USERS"; $testing = displayAllRecords('localhost','root','root@123','email',$queryStatment); 回声 $testing;

    这里

    localhost 表示host 的名称,

    root表示database的用户名

    root@123 表示password for the database

    $queryStatmentgenerating Query

    希望对你有帮助

    【讨论】:

      【解决方案6】:

      PHP 5 >= 5.5.0, PHP 7

      在结果数组上使用array_column

      $column = array_column($result, 'names');
      

      【讨论】:

        【解决方案7】:

        How to put MySQL functions back into PHP 7
        第 1 步

        先获取3月下架的mysql扩展源码:

        https://github.com/php/php-src/tree/PRE_PHP7_EREG_MYSQL_REMOVALS/ext/mysql

        第 2 步

        然后编辑你的 php.ini

        在“扩展”部分或“MySQL”部分的某处,只需添加以下行:

        extension = /usr/local/lib/php/extensions/no-debug-non-zts-20141001/mysql.so
        

        第 3 步

        重新启动 PHP 和 mysql_* 函数现在应该可以再次工作了。

        第 4 步

        关闭所有已弃用的警告,包括来自 mysql_* 的警告:

        error_reporting(E_ALL ^ E_DEPRECATED);
        

        现在下面的代码可以帮助您:

        $result = mysql_query("SELECT names FROM Customers");
        $Data= Array();
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
        {
                $Data[] =  $row['names'];  
        }
        

        您还可以使用mysql_fetch_assoc 获取列中的所有值

        $result = mysql_query("SELECT names FROM Customers");
            $Data= Array();
            while ($row = mysql_fetch_assoc($result)) 
            {
                    $Data[] =  $row['names'];  
            }
        

        此扩展在 PHP 5.5.0 中被弃用,并在 PHP 7.0.0 中被删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

        Reference


        您可以轻松使用 MYSQLI 替代品


        *

        <?php
        $con=mysqli_connect("localhost","my_user","my_password","my_db");
        // Check connection
        if (mysqli_connect_errno())
          {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
          }
        
        $sql="SELECT Lastname,Age FROM Persons ORDER BY Lastname";
        $result=mysqli_query($con,$sql);
        
        // Numeric array
        $row=mysqli_fetch_array($result,MYSQLI_NUM);
        printf ("%s (%s)\n",$row[0],$row[1]);
        
        // Associative array
        $row=mysqli_fetch_array($result,MYSQLI_ASSOC);
        printf ("%s (%s)\n",$row["Lastname"],$row["Age"]);
        
        // Free result set
        mysqli_free_result($result);
        
        mysqli_close($con);
        ?> 
        

        【讨论】:

        • 你好!虽然这个答案有效地允许您继续使用 mysql,但 它被删除是有原因的!!!!! 人们应该停止使用它并使用参数化查询重构他的代码。
        • 是的@FélixGagnon-Grenier,你是对的。这就是为什么我还使用“Mysqli”使用其他简单的方法连接数据库......谢谢
        猜你喜欢
        • 2016-04-11
        • 2021-11-29
        • 1970-01-01
        • 2021-09-18
        • 2021-01-23
        • 2017-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多