Ошибка при добавлении PDO в мой код - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть файл connection.php, где я инициализирую PDO в $ db. И я хочу проверить эту проверку в User.php, который я включаю после connection.php. но это дает мне ошибку.

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;
            }

Пожалуйста, помогите.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Я не хочу это говорить, но попробуйте просто добавить

global $db;

перед вашей $db->query($sql); строкой. Это может работать, в зависимости от того, где именно была создана $ db.

Тем не менее, ответ Prodigitalson - это значительно улучшенный подход, он просто включает в себя исправление всего вашего проекта, что требует дополнительных усилий:)

0 голосов
/ 08 декабря 2010

Вставьте его в класс или создайте одноэлементный класс БД, например ...

Инъекции:

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();

  }
}

Singleton:

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();

      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...