Mvrk Mvrk - 27 days ago 5
MySQL Question

PDO could not be converted to string php

Learning PHP OOP way:

Pass database class object to other class i got this message ' Catchable fatal error: Object of class PDO could not be converted to string ' , meanwhile the code work fine if I comment this line '

//$imageobj= new image($dbobj);
' ?

Update : once I add this line
$this->dbconn=null;
to
getConnection()
function in db.class.php before try{} . every thing WORKS fine !!!


index.php


<?php
include "./classes/db.class.php";
include "./classes/image.class.php";

$dbobj= new db();
$imageobj= new image($dbobj);

$page_title="Shopping Center !";
include './template/header.php';

$dbobj->getConnection();

include './template/footer.php';



db.class.php


class db {
private $host;
private $dbname;
private $username;
private $password;
private $dbconn;
private $status;

public function __construct() {
// the require paramaters to start db connnection
$this->host = '127.0.0.1';
$this->dbname = 'shop_carta';
$this->username = 'root';
$this->password = '';
$this->status = 0;
//$this->dbconn = null;
}

public function getConnection() {
try {
$this->dbconn = new PDO("mysql:host=$this->host;dbname=$this->dbconn", $this->username, $this->password);
if (!is_null($this->dbconn)) {

$this->status = $this->dbconn->getAttribute(PDO::ATTR_CONNECTION_STATUS);
$this->dbconn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$this->dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

return $this->dbconn;
} else {
echo "<div class='alert alert-danger'>"
. " Our server Busy Now try again later.. </div></br>";
return false;
}
} catch (PDOException $ex) {
return false;
}}}



image.class.php
this class receive the $dbobject try to $dbobject->getConncetion() and set retrieve


class image {
private $table_name = 'product_images';
private $dbconn;
public $id;
public $name;

public function __construct($dbobj) {
$this->dbconn = $dbobj->getConnection();
}}


Error message once you pass $dbobj to image class

once you commit line $imageobj= new image($dbobj); in index.php

Assign dbconn to null solve :
Catchable fatal error: Object of class PDO could not be converted to string.
Any suggestion WHY ?

enter image description here

Answer Source

The issue lies here:

"mysql:host=$this->host;dbname=$this->dbconn"

dbname should be a database name. You are providing a property, which (before you added $this->dbconn = null) does not exist, which is why you get an error.

Adding $this->dbconn = null, does prevents the fatal on the non existant property, but youre still providing an empty database name.

You should fix it by replacing it with $this->dbname, like so:

"mysql:host=$this->host;dbname=$this->dbname"