Добрый день всем участника форума, я только начинаю изучать php, в качестве практики пытаюсь написать код для простенького блога . Вначале написал простой класс для подключения к БД Код (Text): $host='localhost'; $user='root'; $pass=''; $db='users'; class ConectDB { public $host; public $user; public $pass; public $db; function __construct(){ } function Conect($host,$user,$pass,$db){ global $DBH; try{ $DBH=new PDO("mysql:host=$host;dbname=$db", $user, $pass); $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $DBH->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8'); $DBH->query("CREATE TABLE IF NOT EXISTS`users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `login` VARCHAR(50) NOT NULL, `pass` VARCHAR(100) NOT NULL, `email` VARCHAR(255), `date` TIMESTAMP DEFAULT '0000-00-00 00:00:00', `update` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `text` TEXT NOT NULL )ENGINE=MyISAM DEFAULT CHARSET=utf8"); } catch(PDOException $e){ echo'Ошибка подключения '.$e->getMessage(); } } function InsertComment($comments){ global $DBH; try{ $result=$DBH->prepare("INSERT IGNORE INTO `users` (`text`) VALUES (:comments)"); $result->bindParam(':comments',$comments); $result->execute($data); } catch (PDOException $e) { echo'Ошибка вставки комментария'.$e->getMessage(); } } function Check($login,$pass){ global $DBH; try{ $result=$DBH->prepare("SELECT FROM `users` WHERE `login`=:login AND `pass`=:pass"); $data=array('pass' => '$pass', 'login' => '$login'); $result->execute($data); } catch (PDOException $e){ echo'Невозможно проверить данные пользователя!'.$e->getMessage(); } } } для вызова методов данного класса использую следующий код Код (Text): if (isset($_POST['text'])){ if(isset($_POST['comments']) && !empty($_POST['comments'])) { $comments=$_POST['comments']; $a = new ConectDB($host,$user,$pass,$db); $a->Conect($host,$user,$pass,$db); $a->InsertComment($comments); } Header("Location:{$_SERVER['SCRIPT_NAME']}?".time()); } if(isset($_POST['check'])){ if(isset($_POST['login']) && !empty($_POST['login'])) { $login=$_POST['login']; } else echo'Вы не ввели логин!'; if(isset($_POST['pass']) && !empty($_POST['pass'])) { $pass=$_POST['pass']; } else echo'Вы не ввели пароль!'; $a = new ConectDB($host,$user,$pass,$db); $a->Conect($host,$user,$pass,$db); $a->Check($login,$pass); } При вызове метода InsertComment все работает нормально-запись в БД добавляется, а вот при вызове метода Check-выдается сразу 2-е ошибки SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES) Fatal error: Call to a member function prepare() on a non-object В чем может быть проблема или где искать ошибки?
Re: ошибка Call to a member function prepare() on a non-obje Логин и пароль правильные-в таблице такие есть.
Re: ошибка Call to a member function prepare() on a non-obje Вы имеете ввиду логин/пароль которые вводит пользователь?Я о них говорю, если речь идет о тех,которые передаются при подключении к БД, то с теми же параметрами подключения-вызов метода "InsertComment" проходит нормально, комментарий вставляется, а при тех же параметрах вызов метода Check вызывает ошибку.
Re: ошибка Call to a member function prepare() on a non-obje [1045] Access denied for user 'root'@'localhost' это логин/пароль
Re: ошибка Call to a member function prepare() on a non-obje Да в том-то и дело,что при одинаковых параметрах($user='root';$pass='' подключения к БД(используя PDO) один метод работает, а второй вызывает ошибку((((. Я так понимаю,если бы логин/пароль были бы не верны, то не выполнялся бы ни один метод?
Ну, для начала, присмотрись повнимательней вот к этим строчкам: Код (PHP): if(isset($_POST['pass']) && !empty($_POST['pass'])) { $pass = $_POST['pass']; } else echo 'Вы не ввели пароль!'; $a = new ConectDB($host,$user,$pass,$db); $a->Conect($host,$user,$pass,$db); и проследи, с каким именно паролем будет совершена попытка подключиться к б.д. Поверь, это будет вовсе не то, что прописано у тебя сверху в твоём классе для работы с б.д.
Re: ошибка Call to a member function prepare() on a non-obje sobachnik- огромное спасибо за подсказку!