如何使stmt_fetch将结果转换为mysqli中的数组

时间:2012-07-26 04:33:21

标签: php mysql mysqli

我对此感到非常沮丧。我试图使用mysqli创建一个包含列值的数组。现在,当我回复所返回的内容时,它什么都不打印。我已经尝试了很多我无法弄清楚的事情。

<?php 
class Database {

    public $dbHost = '';
    public $dbUser = '';
    public $dbPass = '';
    public $dbName = '';

    public $db;

    public function __construct(){ 
        $this->dbConnect();
    }

    public function dbConnect(){

        $this->db = new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName);

        /* check connection */
        if (mysqli_connect_errno()){
            printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }else{
            echo 'connection made';
        }
    }

    public function q($sql){
        $query = $sql;
        self::preparedStatement($query);
    }

    public function preparedStatement($query){
        $i= 0; //index
        $result = array();

        if ($stmt = $this->db->prepare($query)){ 

            /* execute statement */
            if($stmt->execute()) {
                $stmt->bind_result($name);
                while($stmt->fetch()) {
                    $result[0] = $name;
                }
            } else
                echo "error";

            /* close statement */
            $stmt->close();
        } else {
            echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;
        }

        return $result;
    }

    public function __destruct(){}

}


### Test code

$db = new Database();
$res = $db->q("SELECT name FROM test");
echo $res[0];

?>

1 个答案:

答案 0 :(得分:1)

首先,删除0循环中的while。您希望将值一个接一个地存储在数组中,您正在执行的操作始终是覆盖数组中的第一个值,并且需要将从fetch()获取的值存储在临时数组中。

while($row = $stmt->fetch(MYSQLI_ASSOC)) {
   $result[] = $row['name'];
}

第二,您需要使用q()函数返回一些值,因此请将最后一个语句更改为

return self::preparedStatement($query);

请花一些时间在谷歌上搜索这个并查看其他人如何做的例子。