将SQL查询结果转换为PHP数组

14

我对PHP比较新,一直在寻找答案,但似乎找不到我想要的具体答案。

我想要进行SQL查询,类似于这样:

$result = mysqli_query($connection, $command)
if (!$result) { die("Query Failed."); }

// Create my array here ... I'm thinking of maybe having to
// make a class that can hold everything I need, but I dunno    

while($row = mysqli_fetch_array($result))
{
    // Put the row into an array or class here...
}

mysqli_close($connection);

// return my array or class
基本上我想取得结果的全部内容,创建一个数组,在访问行数据时可以类似地进行操作。例如,如果我有一个名为“uid”的字段,我希望能够通过myData['uid']获取它。我想,既然可能会有几行数据,那么可能更像是myData[0]['uid'],myData[1]['uid']等等。
任何帮助都将不胜感激。

你的数据库结构是什么?你可以像这样做:4myData['id'] = $row['id']; - NullPoiиteя
但是如果我不知道会返回多少行或字段怎么办?我还试图创建一个全局的SQL类来为我检索数据,所以我甚至不知道字段的名称,无法像那样进行赋值。我的数据库结构目前只有: uid:整数 firstName:字符型(64) lastName:字符型(64) emailAddress:字符型(64) password:字符型(64) - Jonathan Plumb
你可以在查询中限制结果 - NullPoiиteя
这是我要尝试的事情:调用类似于SQL :: Get(“SELECT uid FROM users WHERE email ='".$emailAddress."'”);的东西,并拥有一个数组,我可以只需执行$result [0] ['uid'],或者SQL :: Get(“SELECT firstName,lastName FROM users WHERE email ='".$emailAddress."'”);并拥有一个数组,我可以调用$result [3] ['firstName'] - Jonathan Plumb
4个回答

23

你可以做:

$rows = [];
while($row = mysqli_fetch_array($result))
{
    $rows[] = $row;
}

那不起作用。我刚试过了,然后执行了echo($rows[0]['uid']),但什么也没有输出... - Jonathan Plumb
1
搞定了。我之前写的是 $array[] = $row,但实际上只需要写成 $array = $row 就可以了。 - Jonathan Plumb
跟我一起不起作用的是 $rows = []; 需要改成 $rows = array(); - J261

6

您可以尝试使用mysqli_result::fetch_all()函数来生成数组:

$result = mysqli_query($connection, $command)

if (!$result) { die("Query Failed."); }

$array = $result->fetch_all();

$result->free();

mysqli_close($connection);

注意:这仅适用于MySQLND


对于类,您可以尝试使用以下代码:

$result = mysqli_query($connection, $command)

if (!$result) { die("Query Failed."); }

while($model = $result->fetch_assoc()){
    // Assuming ModelClass is declared
    // And have method push() to append rows.
    ModelClass::push($model);
}

$result->free();

mysqli_close($connection);

或者这样:

// Base Model - abstract model class.
class ModelClass extends BaseModel {

    // constructor
    public function __construct(mysqli &$dbms){
        // $this->dbms is MySQLi connection instance.
        $this->dbms   = &$dbms;

        // $this->models is buffer for resultset.
        $this->models = array();
    }

    // destructor
    public function __destruct(){
        unset($this->dbms, $this->models);
    }

    public function read(){            
        $result = $this->dbms->query($command);

        if($this->dbms->errno){
            throw new Exception($this->dbms->error, $this->dbms->errno);
        }

        $this->models = $result->fetch_all();

        $result->free();
    }
}

最好不要使用循环,这样做会更好 :) +1 - NullPoiиteя
@NullPoiиteя,不幸的是,它不适用于Linux。上次我使用时就遇到了问题。 - BlitZ
你能提供一下文档吗?他们说这只能在 Windows 操作系统上运行,但据我所知它也应该可以在 Linux 上运行... :) - NullPoiиteя
@NullPoiиteя 是的...我不知道在Linux上安装MySQLND是可能的。 - BlitZ
mysqli 有限制,这很糟糕...这就是为什么我们大多数人建议使用 pdo mysql。 - NullPoiиteя

1
//object oriented style mysqli
//connect to your db
$mysqli = new mysqli("host", "user", "password", "dbname");
$result = $mysqli->query("SELECT * FROM `table`");

//use mysqli->affected_rows
for ($x = 1; $x <= $mysqli->affected_rows; $x++) {
    $rows[] = $result->fetch_assoc();
}

//this will return a nested array
echo "<pre>";
print_r($rows);
echo "</pre>";

编辑此内容并将其放在一个类中,只需在使用数据库进行查询时随时调用它。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接