0

PDOを使用してmysqliから離れ始めたばかりですが、問題が発生しました。チュートリアルに従っていて、データベースから配列を返したいのですが、次のエラーが発生します。

致命的なエラー:27行目のC:\ xampp \ htdocs \ phptuts \ crud \ core \ managedb.class.phpの非オブジェクトでメンバー関数rowCount()を呼び出す

これが私のmanagedb.phpクラスです:

<?php

class ManageDatabase
{

    public $link;

    function __construct()
    {
        include_once('database.class.php');
        $conn = new database;
        $this->link = $conn->connect();
        return $this->link;
    }

    function getData($table_name, $id=null)
    {
        if(isset($id))
    {
        $query = $this->link->query("SELECT * FROM $table_name WHERE id = '$id' ORDER BY id ASC");
    }
    else
    {
        $query = $this->link->query("SELECT * FROM $table_name ORDER BY id ASC");
    }

    $rowCount = $query->rowCount();
    if($rowCount >= 1)
    {
        $result = $query->fetchAll();
    }
    else
    {
        $result = 0;
    }
    return $result;
}

}

次に、次のコードを使用して応答を取得しようとしています。

<?php

include_once('../core/managedb.class.php');
$init = new ManageDatabase;

$table_name = 'users';
$data = $init->getData($table_name);

print_r($data);

これは私がエラーを受け取ったときです、何かアイデアはありますか?

4

2 に答える 2

1

どうやらそれはオブジェクトではないのでvar_dump($query)、行の前にそれが実際に何であるかを確認したかった. 全体が期待どおりに返されなかった$rowCount = $query->rowCount();ため、NULLまたは空のいずれかであると推測しています$this-link->query(<sql statement>);

于 2012-06-18T19:55:31.703 に答える
0

チェックアウトするいくつかのこと:

PHPマニュアルから:

PDO::query() は PDOStatement オブジェクトを返すか、失敗すると FALSE を返します。

クエリが成功するかどうか、成功しない場合はその理由をテストする必要があります。PDO のerrorInfo関数を使用してエラーを確認できます。

if ($query == false) 
{
    print_r($this->link->errorInfo());
    exit();
}

注意すべきもう 1 つのことはrowCount()、PDO では、INSERT / UPDATE / DELETE タイプのステートメントから影響を受ける行を返すことです。SELECT の場合、行数を取得する場合と取得しない場合があります。マニュアルでは、行数を見つけるための別のクエリを提案していますが、あなたのインスタンスでは、fetchAll() から何かが返されるかどうかをテストする方が簡単かもしれません:

$result = $query->fetchAll();
if (!empty($result)) 
{
    return $result;
} 
else 
{
    return 0;
}
于 2012-06-19T05:29:22.307 に答える