4

ここで完全に道に迷ってしまいました... いくつかの入力を検証した後、Messageクラスのインスタンスを作成し、データベースにデータを挿入しようとしました:

// send message
$message = $this->model->build('message', true);
$message->insertMessage($uid, $user->user_id, $title, $message);

挿入方法は非常に簡単です。

// insert a new message
public function insertMessage($to_id, $from_id, $title, $body)
{
    $sql = "INSERT INTO messages (to_id, from_id, title, body, create_date) VALUES
                                 (:to_id, :from_id, :title, :body, NOW())";
    $sth = $this->db->prepare($sql);
    return $sth->execute([':to_id' => $to_id, ':from_id' => $from_id, ':title' => $title, ':body' => $body]);
}

ただし、送信時に空白のページが表示され、Apache エラー ログには次のように表示されます。

[Tue Jul 30 22:34:44 2013] [error] [client 127.0.0.1] PHP Catchable fatal error: クラス Framework\models\Message のオブジェクトを /var/www/p-lug/p の文字列に変換できませんでした-lug_lib/framework/models/Message.php の 18 行目、リファラー: https://p-lug.localhost/message/compose/4

18行目はreturn文を参照しているのですが、削除returnしても同じエラーになります。

このエラーに関する無数のリンクを読みましたが、私の例に当てはまる回答はないようです。オブジェクトを文字列に変換したり、結果を出力したりすることは決してありません。他のクラスとの挿入のための同様のコードは完全に機能します。実際、このコードは別の作業例からコピーして貼り付けたもので、変更されたのはテーブルとデータだけです。

var_dump()渡されるすべての変数 on$thisとonを使用しまし$sthた。すべてがチェックアウトされます。しかし、execute()それは失敗します。ここで一体何が起こっているのですか?

4

2 に答える 2

15

したがって、$message にはオブジェクトが含まれます。

このオブジェクトは、4 番目の引数として関数 insertMessage に渡されます ($body は同じオブジェクトです)。

次に、変数 $body に格納されている Message オブジェクトを、実行する引数として渡されるハッシュ配列に格納します。

execute 関数は Message オブジェクトを文字列に変換しようとしましたが、__toString 関数が宣言されていないことがわかりました。

したがって、宣言するか

public function __toString() {
    return $the_string;
}

または、実行関数に渡すことができる別のパブリック関数/メンバーを作成します。

于 2013-07-31T04:06:09.593 に答える