Класс ООП, для 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.

21 Авг 2019 в 07:04
206 +1
0
Ответы
1

Для организации правильного подключения к базе данных через 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();

Таким образом, рекомендуется использовать класс для управления подключением к базе данных и выполнения запросов, чтобы ваш код был более организованным и легким для поддержки.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир