1

プロジェクトの一部のコードを変更していて、PHP が存在しないクラス プロパティに関する非常に奇妙なエラーをスローしています。エラーメッセージは次のとおりです。

メッセージ: 未定義のプロパティ: stdClass::$limit
ファイル: C:\xampp\htdocs\site\Classes\model.php
行: 48

エラーをスローしているメソッドのほとんどは次のとおりです。行 48 がマークされています。

$this->st->execute();
$this->st->setFetchMode(PDO::FETCH_OBJ);

if($row = $this->st->fetch()) {
    return $max - $row->limit; // line 48
}

return $max;

Config::$limit以前は存在していましたが、コードを変更したときに削除しました。上記のコードが PHP ファイルに保存された実際のコードであることを多くのテキスト エディターで確認したので、私のテキスト エディターではありません。

何が原因でしょうか?

4

3 に答える 3

1

$rowStdClassによって返される のオブジェクトのようPDOStatement::fetch()です。このオブジェクトのプロパティ名は、結果セットで返される列名に対応しています。limitプロパティがない場合limitは、SQL クエリによって返される列がないためです。

于 2013-03-11T14:46:39.257 に答える
0

このエラーUndefined property: stdClass::$limitは、静的プロパティを探しているという意味ではありません。これは、PHP が一般的にプロパティを参照する方法です (class::property)。

PDOは、エラーがある場合、またはクエリ結果の何らかの表現がある場合にfetch()返されます。false使用するとき

$this->st->setFetchMode(PDO::FETCH_OBJ);

stdClassこれは、行の列名をプロパティとして、結果の行をデフォルト クラスのオブジェクトとして返すように PDO に指示します。結果の行に列がないため、そのエラーが発生していlimitます。

実際に何が返されているかを調べることはできvar_dump($row)ますが、実行されているクエリが予想と異なるかSELECT *、データベースがテーブル定義を変更した可能性があります。

于 2013-03-11T14:49:55.287 に答える
0

PDO::FETCH_OBJ は、各結果行がstdClassインスタンスとしてフェッチされることを意味します。

したがって、考えられる唯一の理由は、それ$row->limitが存在しないことです!
チェックを追加して、これが正しいことを確認して!empty($row->limit)みてください。var_dump()

于 2013-03-11T14:41:52.940 に答える