致命错误:如何解决会员功能的准备?

时间:2017-11-29 16:22:07

标签: php mysql

我正在尝试将值插入名为'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

我做错了什么?

1 个答案:

答案 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());
            }

您将知道数据库连接失败的原因