Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将数据库行放入数组?_Php_Sql - Fatal编程技术网

使用PHP将数据库行放入数组?

使用PHP将数据库行放入数组?,php,sql,Php,Sql,我只是想知道如何编写代码执行SQL查询,然后将每一行放入一个新数组,例如,假设一个表如下所示: $people= mysql_query("SELECT * FROM friends") 输出: | ID | Name | Age | --1----tom----32 --2----dan----22 --3----pat----52 --4----nik----32 --5----dre----65 如何创建一个多维数组,该数组的工作方式如下:第一行第

我只是想知道如何编写代码执行SQL查询,然后将每一行放入一个新数组,例如,假设一个表如下所示:

$people= mysql_query("SELECT * FROM friends")    
输出:

| ID | Name | Age |   
--1----tom----32   
--2----dan----22   
--3----pat----52   
--4----nik----32   
--5----dre----65
如何创建一个多维数组,该数组的工作方式如下:第一行第二列数据可以使用$people[0][1]访问,第五行第三列数据可以使用$people[4][2]访问

我将如何构建这种类型的数组


很抱歉,如果这是一个奇怪的问题,我只是不熟悉PHP+SQL,想知道如何直接访问数据。性能和速度不是问题,因为我只是编写一些小的测试脚本来掌握这种语言。

您是否愿意使用DB模块,比如模块?如果是这样,请查看使用PHP的PEARDB模块编写脚本。本模块已经完成,但它将向您展示一些更高级(和更常见)的DB实践的基础知识

$rows = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    $rows[] = $row; 
}
至于您的实际问题,您可以迭代所有行并填充一个数组

$dsn = "mysqli://testuser:testpass@localhost/test";
$conn =& DB::connect ($dsn);
if (DB::isError ($conn)) { /* ... */ }

$result =& $conn->query ("SELECT * FROM friends");
if (DB::isError ($result)){ /* ... */ }

while ($row =& $result->fetchRow()) {
   $people[] = $row;
}
$result->free ();
或者,您可以编写一个实现的对象,在引用该索引时请求特定的行。(此代码可能完全错误,但下面是我的尝试)


。。。或者什么。

您应该初始化数组,否则如果没有行,就不会定义变量。我发现有趣的是,在offsetget的实现中,您没有充分的理由使用引用,然后就不会按预期的方式通过引用返回(至少如果您想要像$a=new FriendsTable();$a[“foo”][“bar”]=42;工作)。但除此之外,+1.Ya,我有点匆忙地从我链接的文章中复制粘贴了出来,我认为这对PHP4意味着更多。。。您建议我删除引用,还是应该添加引用返回?确实没有理由通过引用将$result和$people分配给。至于通过引用返回,这是offsetget的常见行为,因此像$a[“foo”][“bar”]=42、$a[“foo”]->bar=42或unset($a[“foo”][“bar”])这样的东西都有任何效果。平心而论,在这种情况下,没有什么意义,因为您每次都返回新数据。如果将结果存储在一个类属性中,然后返回属性值,这是有意义的。
$dsn = "mysqli://testuser:testpass@localhost/test";
$conn =& DB::connect ($dsn);
if (DB::isError ($conn)) { /* ... */ }

$result =& $conn->query ("SELECT * FROM friends");
if (DB::isError ($result)){ /* ... */ }

while ($row =& $result->fetchRow()) {
   $people[] = $row;
}
$result->free ();
class FriendsTable implements ArrayAccess {
    function offsetGet($key) {  
        $result =& $conn->query ("SELECT * FROM friends LIMIT $key, 1",); // careful; this is vulnerable to injection...
        if (DB::isError ($result)){ die ("SELECT failed: " . $result->getMessage () . "\n"); }
        $people = null;
        if ($row =& $result->fetchRow ()) {
           $people = $row;
        }
        $result->free ();
        return $people;
    }  

    function offsetSet($key, $value) {  
        /*...*/ 
    }  

    function offsetUnset($key) {  
        /*...*/ 
    }  

    function offsetExists($offset) {  
        /*...*/ 
    }
}

$people = new FriendsTable();
$person = $people[2]; // will theoretically return row #2, as an array