Класс ООП, для PDO авторизации? Здравствуйте, Помогите разрешить вопрос, стоит ли подключение к базе оборачивать в класс (ConnectionBD, например) или можно просто вынести в отдельный файл. Как организовать правильное подключение к БД? Сделал на данном этапе следующее, раньше была обычная авторизация через мд5 и подключение из файлика. Реализованное на примере статьи phpfaq.ru/pdo.define('DB_HOST', 'localhost'); define('DB_NAME', 'sadwordsbd'); define('DB_USER', 'root'); define('DB_PASS', ''); define('DB_CHAR', 'utf8'); class Connection { //переменная для проверки protected static $instance = null;
public static function instance() { if (self::$instance === null) { $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => TRUE, ); $db_Con = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR; self::$instance = new PDO($db_Con, DB_USER, DB_PASS, $opt); } return self::$instance; } } Сам запрос require_once("class.php"); $dbh = new Connection; $sql=" SELECT * FROM `UsersSW` WHERE `username`='123'; "; $stmt = $db->query($sql); if(!$stmt){echo('Error selecting news item:'.$mysqli_error());exit();} Ругается на query.
Для организации правильного подключения к базе данных через PDO, вы можете использовать класс Connection, который вы создали. Однако, в вашем примере вы создаете объект класса Connection, но пытаетесь использовать переменную $db вместо $dbh, которая является вашим объектом PDO.
Вам следует изменить строку:
$stmt = $db->query($sql);
на
$stmt = $dbh->instance()->query($sql);
Это позволит вам использовать метод instance() вашего класса Connection для получения объекта PDO, а затем выполнять запросы через этот объект.
Кроме того, у вас есть ошибка в коде, т.к. переменная $mysqli_error не определена для PDO. Вместо этого вы можете использовать метод errorInfo() объекта PDOStatement для получения информации об ошибке:
И важно передавать параметры в ваш запрос через подготовленные запросы, чтобы избежать SQL инъекций:
$sql = "SELECT * FROM `UsersSW` WHERE `username`=:username"; $stmt = $dbh->instance()->prepare($sql); $stmt->bindParam(':username', '123', PDO::PARAM_STR); $stmt->execute();
Таким образом, рекомендуется использовать класс для управления подключением к базе данных и выполнения запросов, чтобы ваш код был более организованным и легким для поддержки.
Для организации правильного подключения к базе данных через PDO, вы можете использовать класс Connection, который вы создали. Однако, в вашем примере вы создаете объект класса Connection, но пытаетесь использовать переменную $db вместо $dbh, которая является вашим объектом PDO.
Вам следует изменить строку:
$stmt = $db->query($sql);на
$stmt = $dbh->instance()->query($sql);Это позволит вам использовать метод instance() вашего класса Connection для получения объекта PDO, а затем выполнять запросы через этот объект.
Кроме того, у вас есть ошибка в коде, т.к. переменная $mysqli_error не определена для PDO. Вместо этого вы можете использовать метод errorInfo() объекта PDOStatement для получения информации об ошибке:
if(!$stmt){echo('Error selecting news item:'.$stmt->errorInfo());exit();}И важно передавать параметры в ваш запрос через подготовленные запросы, чтобы избежать SQL инъекций:
$sql = "SELECT * FROM `UsersSW` WHERE `username`=:username";$stmt = $dbh->instance()->prepare($sql);
$stmt->bindParam(':username', '123', PDO::PARAM_STR);
$stmt->execute();
Таким образом, рекомендуется использовать класс для управления подключением к базе данных и выполнения запросов, чтобы ваш код был более организованным и легким для поддержки.