我正在使用php开发一个Web应用程序。我已经创建了一个我将访问的数据库类。现在在一个新文件中我正在访问该类,但我收到错误:
!) Catchable fatal error: Object of class DbMain could not be converted to string in C:\wamp\www\baapdevelopers\DBMain.php on line 23
代码
<?php
class DbMain{
private $host = 'localhost';
private $dbname = 'test';
private $username = 'root';
private $password = '';
public $con;
function __construct(){
$this->connect();
}// this is the main constructor used for initializing the database
function connect(){
try{
$this->con = new PDO("mysql:host=$this-host;dbname=$this->dbname",$this->username, $this->password);
$this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo 'We\'re sorry but there was an error while trying to connect to the database';
file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);
}
}
}
/* Test.php */
//include_once("DBMain.php");
$db = new DbMain();
?>
我不知道为什么会出现这个错误
答案 0 :(得分:3)
在这一行:
$this->con = new PDO("mysql:host=$this-host;dbname=$this->dbname",$this->username, $this->password);
当您在字符串中使用$this->dbname
时,它只会将$this
视为变量,因此会尝试转换$this
(这实际上是DbMain类的实例)到一个字符串。这就是错误消息告诉你的。
相反,您应该使用花括号({$this->dbname}
)转义字符串中的复杂变量名称。然后你的代码变成:
$this->con = new PDO("mysql:host={$this->host};dbname={$this->dbname}",$this->username, $this->password);
可以找到有关此概念的更多信息here。