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 错误日志显示:

[2013 年 7 月 30 日星期二 22:34:44] [错误] [客户端 127.0.0.1] PHP 可捕获的致命错误:类 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$sth,一切都检查出来了。但execute()它失败了。这到底是怎么回事?

4

2 回答 2

15

所以 $message 包含一个对象。

该对象作为第四个参数传递给函数 insertMessage($body 仍然是同一个对象)

然后,您将存储在变量 $body 中的 Message 对象存储在哈希数组中,该哈希数组作为参数传递以执行。

执行函数尝试将 Message 对象转换为字符串,但发现没有声明 __toString 函数。

所以要么声明

public function __toString() {
    return $the_string;
}

或创建另一个可以传递给执行函数的公共函数/成员。

于 2013-07-31T04:06:09.593 回答
0

$message传递给$body参数的是从build()模型中的方法返回的对象。

您可以简单地返回在方法中构建的消息build()而不是对象。

于 2015-09-06T01:52:59.620 回答