2010-12-08 70 views
0

我有connection.php文件,其中我正在初始化$ db中的PDO。 我想检查一下在connection.php中包含的User.php中的验证。 但它给我错误。将PDO添加到我的代码时出错

try { 
    $db = new PDO("mysql:dbname=$db_name;host=$db_host", $db_username,$db_password); 
    echo "PDO connection object created"; 
} 
catch(PDOException $e){ 
    echo $e->getMessage(); 
} 

如何通过执行PDO来验证此代码。 如何我会通过PDO用户类..

Fatal error: Call to a member function query() on a non-object in /var/www/youngib/rahul/yapi/user.php on line 41 

    $sql="select * from users where email='$this->email'"; 
      $rs=$db->query($sql); 
      if(mysql_num_rows($rs)>0){ 
       $msg=geterrormsg(4); 
        //email already exist 
       echo $msg= "{ 'success': 'false','msg':'$msg'  ,'error_code':'4'  }"; 
       return false; 
      } 

请帮助。

谢谢。

+0

告诉我们,初始化`$ db`的代码。根据你发布的内容,我希望`$ db`是一个非对象。另外,考虑使用参数化查询,尤其是因为您已经在使用PDO。 – Asaph 2010-12-08 07:01:19

+0

我发布了$ db的代码 – XMen 2010-12-08 07:06:52

回答

0

在注入它的类或做一个单身DB类像...

注:

class User 
{ 
    protected $db; 

    public function __construct(PDO $db) 
    { 
    $this->db = $db; 
    } 

    public function getDb() 
    { 
    return $this->db; 
    } 

    public function isUser($email) 
    { 
    $stmt = $this->getDb()->prepare('select count(email) as user_exists from users where email = :email'); 
    return (bool) $stmt->execute(array(':email' => $email))->fetchColumn(); 

    } 
} 

辛格尔顿:

class Database { 
    protected $pdo; 
    protected static $instance; 

    protected function __construct($dsn, $user, $password) 
    { 
    $this->pdo = new PDO($dsn, $user, $password); 
    } 

    public static function getInstance() 
    { 
    if(!self::$instance) 
    { 
     // normally you would load the dsn, user, and password from a config file 
     $db = Config::get('db'); 
     self::$instance = new self($db['dsn'], $db['user'], $db['password']); 
    } 

    return self::$instance; 
    } 

    public function getDb() 
    { 

    return $this->pdo; 
    } 
} 


class User 
    { 
     protected $db; 

     public function __construct(PDO $db = null) 
     { 
     if(null !== $db) 
     { 
      $this->db = $db; 
     } 
     } 

     public function getDb() 
     { 
     if(!$this->db) 
     { 
      $this->db = Database::getInstance()->getDb(); 
     } 

     return $this->db; 
     } 

     public function isUser($email) 
     { 
     $stmt = $this->getDb()->prepare('select count(email) as user_exists from users where email = :email'); 
     return (bool) $stmt->exectute(array(':email' => $email))->fetchColumn(); 

     } 
    } 
0

我讨厌这样说,但尝试只是加入

global $db; 

行之前$db->query($sql);行。它可能工作,具体取决于$ db的创建位置。

这就是说,prodigitalson的回答是大大改进方法,它只是涉及到修复您的整个设计,这涉及到更多的前面的工作:)

相关问题