我正在尝试将值插入名为'todo'的MySQL数据库中,我建立了PDO连接。
<?php
include_once('class.database.php');
class ManageUsers{
public $link;
function __construct(){
$db_connection = new dbConnection();
$this->link = $db_connection->connect();
return $this->link;
}
function registerUsers($username,$password,$ip_address,$time,$date){
$query = $this->link->prepare("INSERT INTO users (username,password,ip_address,time,date) VALUES (?,?,?,?,?)");
$values = array($username,$password,$ip_address,$time,$date);
$query->execute($values);
$counts = $query->rowCount();
return $counts;
}
}
$users = new ManageUsers();
echo $users->registerUsers('bob','bob','127.0.0.1','12:00','29-02-2012');
?>
<?php
class dbConnection{
protected $db_conn;
public $db_name = 'todo';
public $db_user = 'root';
public $db_pass = 'password';
public $db_host = 'localhost';
function connect(){
try{
$this->db_conn = new PDO("mysql:host=$this->db_host;dbname=$this->db_name",$this->db_user,$this->db_pass);
return $this->db_conn;
}
catch(PDOException $e)
{
return $e->getMessage();
}
}
}
?>
结果应为1 - 即它应该在数据库中添加一行。相反,我收到以下错误消息。
致命错误:未捕获错误:在C:\ xampp \ htdocs \ classes \ class.ManageUsers.php中调用字符串上的成员函数prepare():15堆栈跟踪:#0 C:\ xampp \ htdocs \ classes \ class.ManageUsers.php(24):ManageUsers-&gt; registerUsers('bob','bob','127.0.0.1','12:00','29 -02-2012')#1 {main}引入第15行的C:\ xampp \ htdocs \ classes \ class.ManageUsers.php
我做错了什么?
答案 0 :(得分:0)
首先,您不应该在$this->link
中返回ManageUsers::__construct
。默认情况下,construct将返回该类的新对象。你的错误说,
Fatal error: Uncaught Error: Call to a member function prepare() on string in
这意味着您的$link
属性包含字符串而不是db对象。这是有道理的,因为您的代码的以下部分:(在dbConnection
类)
catch(PDOException $e)
{
return $e->getMessage();
}
一旦数据库连接失败,您将使用返回字符串的$e->getMessage()
返回错误消息。
通常,如果db连接失败,则应终止脚本。如果您将脚本更改为:
catch(PDOException $e)
{
die($e->getMessage());
}
您将知道数据库连接失败的原因