Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Catchable fatal error: Object of class could not be converted to string

Tags:

php

pdo

I am completely lost here... After validating some input I create an instance of a Message class and attempt to insert data into the database:

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

The method for insertion is very straight-forward:

// 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]);
}

However, upon submission I end up with a blank page and the Apache error log says:

[Tue Jul 30 22:34:44 2013] [error] [client 127.0.0.1] PHP Catchable fatal error: Object of class framework\models\Message could not be converted to string in /var/www/p-lug/p-lug_lib/framework/models/Message.php on line 18, referer: https://p-lug.localhost/message/compose/4

Line 18 refers to the return statement, but even if I remove return it results in the same error.

I've read countless links regarding this error but none of the answers appear to apply to my example. At no point am I trying to convert an object to a string or output the result, and similar code for insertions with other classes works perfectly. In fact, this code was copy-pasted from another working example, the only thing changed is the table and data.

I've used var_dump() on all the variables being passed, on $this and $sth, everything checks out. But on execute() it fails. What the heck is going on here?

like image 939
mister martin Avatar asked Dec 06 '22 06:12

mister martin


1 Answers

So $message contains an object.

This object gets passed to the function insertMessage as the 4th argument ($body which is still the same object)

You then store the Message object stored in the variable $body in the hash array which is passed as an argument to execute.

The execute function attempts to convert the Message object to a string but finds that there is not __toString function declared.

So either declare

public function __toString() {
    return $the_string;
}

or create another public function/member that you can pass to the execute function.

like image 96
Logan Murphy Avatar answered Dec 11 '22 09:12

Logan Murphy