Свободное общение | Правильный ли PDO?
Собственно я выгружал двиги на процедурке, много претензий. Вот пример моего PDO:
Дайте оценку, поправьте где и что не так...
На метод шифрования пока не обращайте внимания..
<?php
$db_host = 'localhost';
$db_name = '...';
$db_user = '...';
$db_password = '...';
$db_charset = 'utf8';
try {
$sql = new PDO("mysql:host=$db_host; dbname=$db_name; charset=$db_charset", $db_user, $db_password);
}
catch(PDOException $err) {
echo 'Нет соединения с базой данных!';
exit;
}
if(isset($_COOKIE['user_id']) and isset($_COOKIE['hash'])) {
$user_id = filter_num($_COOKIE['user_id']);
$hash = filter_text($_COOKIE['hash']);
}
if(isset($user_id) and isset($hash)) {
$user = $sql->prepare("SELECT * FROM `users` WHERE `id` = ? and `hash` = ?");
$user->execute($user_id, $hash);
$user = $user->fetch(PDO::FETCH_ASSOC);
}
if(!isset($_COOKIE['user_id']) or !isset($_COOKIE['hash']) or !isset($user)) {
setCookie('user_id', '');
setCookie('hash', '');
}
?>
Дайте оценку, поправьте где и что не так...
На метод шифрования пока не обращайте внимания..
<?php
$db_host = 'localhost';
$db_name = '...';
$db_user = '...';
$db_password = '...';
$db_charset = 'utf8';
try {
$sql = new PDO("mysql:host=$db_host; dbname=$db_name; charset=$db_charset", $db_user, $db_password);
}
catch(PDOException $err) {
echo 'Нет соединения с базой данных!';
exit;
}
if(isset($_COOKIE['user_id']) and isset($_COOKIE['hash'])) {
$user_id = filter_num($_COOKIE['user_id']);
$hash = filter_text($_COOKIE['hash']);
}
if(isset($user_id) and isset($hash)) {
$user = $sql->prepare("SELECT * FROM `users` WHERE `id` = ? and `hash` = ?");
$user->execute($user_id, $hash);
$user = $user->fetch(PDO::FETCH_ASSOC);
}
if(!isset($_COOKIE['user_id']) or !isset($_COOKIE['hash']) or !isset($user)) {
setCookie('user_id', '');
setCookie('hash', '');
}
?>
526044731 , вот мой глянь может что то полезное будет для тебя
<?php
$db_host = 'localhost'; //хост
$db_user = 'root'; //пользователь
$db_tabl = 'db_new'; //табл
$db_pass = ''; //password
try{
$dsn = "mysql:host=$db_host;dbname=$db_tabl";
$db = new PDO($dsn, $db_user, $db_pass);
} catch (PDOException $e) {
die('Нет соединения с БД! <br>Ошибка:<b> '.$e->getMessage().'</b>');
}
$db->query('SET NAMES utf8');
ob_start();
session_start();
/* Проверка на авторизацию юзера */
if (filter_has_var(INPUT_COOKIE, 'login') AND filter_has_var(INPUT_COOKIE, 'password')) {
$user=$db->query("SELECT * FROM `users` WHERE `login`='".filter_input(INPUT_COOKIE, 'login')."' and `password`='".filter_input(INPUT_COOKIE, 'password')."' ")->fetch();
}
function noauth(){
global $user; //только для гостей
if(!empty($user)){
header('Location: /main');
exit;
}
}
function auth(){
global $user; //только для авторизированных.
if(empty($user)){
header('Location: /');
exit;
}
}
<?php
$db_host = 'localhost'; //хост
$db_user = 'root'; //пользователь
$db_tabl = 'db_new'; //табл
$db_pass = ''; //password
try{
$dsn = "mysql:host=$db_host;dbname=$db_tabl";
$db = new PDO($dsn, $db_user, $db_pass);
} catch (PDOException $e) {
die('Нет соединения с БД! <br>Ошибка:<b> '.$e->getMessage().'</b>');
}
$db->query('SET NAMES utf8');
ob_start();
session_start();
/* Проверка на авторизацию юзера */
if (filter_has_var(INPUT_COOKIE, 'login') AND filter_has_var(INPUT_COOKIE, 'password')) {
$user=$db->query("SELECT * FROM `users` WHERE `login`='".filter_input(INPUT_COOKIE, 'login')."' and `password`='".filter_input(INPUT_COOKIE, 'password')."' ")->fetch();
}
function noauth(){
global $user; //только для гостей
if(!empty($user)){
header('Location: /main');
exit;
}
}
function auth(){
global $user; //только для авторизированных.
if(empty($user)){
header('Location: /');
exit;
}
}
526044731 , делай так лучше
$user->execute(array($user_id, $hash)); то что у тебя это чуток не правильно
526044731 , Причем тут процедурка и PDO?
526044731 , Да и PDO лучше юзать в обертке