1

私はこれにとても不満を感じています。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];

?>
4

1 に答える 1

1

まず、ループ内の を削除0します。while値を次々に配列に格納したい場合、配列の最初の値を常に上書きすることになり、取得した値をfetch()一時配列に格納する必要があります。

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

q()次に、関数が何らかの値を返す必要があるため、最後のステートメントを次のように変更します。

return self::preparedStatement($query);

これについてグーグルで調べて、他の人がどのように行っているかの例を見てください.

于 2012-07-26T04:43:24.833 に答える