-5

PHPスクリプトに問題があります。問題は、私が非オブジェクトの関数を呼び出していることを示していますが、オブジェクトは存在しているということです。

スクリプトは次のとおりです。

if ($dcdt_sql['pdo']) {
try {
    $dbh = new PDO(
        'mysql:host='.$dcdt_sql[0].';dbname='.$dcdt_sql[3],
        $dcdt_sql[1],
        $dcdt_sql[2],
        array(
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
            PDO::ATTR_PERSISTENT => false
        )
    );
}
catch (PDOException $e) { die("PDO ERR: [".$e->getMessage()."]"); }
}
else { $dbh = DBManager::connect(); }

switch ($mode) {
case 'fetch_assoc':
    if ($dcdt_sql['pdo']) {
        try {
            $sth = $dbh->prepare($sqlQuery)->execute();
            $result = $sth->fetchAll(PDO::FETCH_ASSOC); // PROBLEM IS IN THIS LiNE
            $return = $result;
        }
        catch (PDOException $e) { die("PDO ERR: [".$e->getMessage()."]"); }
    }
    else {
        $result = $dbh->query($sqlQuery);
                    if (!is_object($result)) { die('DEBUG: Query error: ['.$sqlQuery.'] returned: ['.print_r($result,1).']'); }//DEBUG
        while ($row = $result->fetch_assoc()) {
            $list[] = $row;
        }
        $return = $list;
    }
break;

問題はコメントしたところですが、関数が呼び出されるオブジェクトである必要があります。だから私はそれを理解していません。

私が得るエラー:

致命的なエラー:102行目の/usr/local/www/apache22/data/centrs/dc_elec/report.lib.incにある非オブジェクトのメンバー関数fetchAll()を呼び出す

前もって感謝します。

4

4 に答える 4

2

http://sg.php.net/manual/en/pdostatement.fetchall.php

指示された正しい使用法:

<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
于 2012-06-29T07:24:45.083 に答える
1

execute メソッドは、オブジェクトではなく、TRUE または FALSE を返します。試す

$sth = $dbh->prepare($sqlQuery);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
于 2012-06-29T07:24:29.670 に答える
0

試す:

        $sth = $dbh->prepare($sqlQuery);
        $sth->execute();
        $result = $sth->fetchAll(PDO::FETCH_ASSOC); // PROBLEM IS IN THIS LiNE
        $return = $result;

execute はオブジェクト自体ではなくブール値を返すため、これは機能するはずです。コードの残りの部分について批判します。オブジェクトを扱うときは、ポリモーフィズムを調べてください。「汚い仕事」を専用のオブジェクトに入れる場合、これらの if/else ステートメントは必要ありません。

于 2012-06-29T07:26:01.227 に答える
0

たぶん試してみてください

$sth = $dbh->prepare($sqlQuery);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC); // PROBLEM IS IN THIS LiNE
$return = $result;
于 2012-06-29T07:24:28.417 に答える