[PHP] Помогите "преобразовать" mysql в PDO

666FoX666

Участник
Сообщения
702
Реакции
210
Здравствуйте. Имеется простая форма регистрации на PHP+MySQL. Используется mysql подключение к БД, но я хочу переписать на PDO.

Нужна помощь в нескольких моментах. Само подключение к БД у меня вроде получилось.
Было:
PHP:
    $db = mysql_connect (" . $db_host . ", " . $db_user . ", " . $db_pass . ");
    mysql_select_db (" . $db_name . ", $db);

Стало (то что в комментариях перенесено в config.php):
PHP:
    include ("config.php");
    
    //$db_host = 'localhost';
    //$db_name = 'name';
    //$db_user = 'user';
    //$db_pass = 'password';
    
    try
    {
        $dbh = new PDO('mysql:host=' . $db_host . ';dbname=' . $db_name . '', $db_user, $db_pass);
    }
    catch (PDOException $e)
    {
        print "Ошибка: " . $e->getMessage() . "<br/>";
        die();
    }

И вот теперь 2 "вопроса".
1.
Было:
PHP:
    $result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);

    $myrow = mysql_fetch_array($result);
    if (!empty($myrow['id']))
    {
        exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
    }

Сделал так:
PHP:
    $sth = $dbh->prepare("SELECT id FROM users WHERE login=:login");
    $sth->bindParam(":login", $login, PDO::PARAM_STR);
    $sth->execute();
    $result = $sth->fetch(PDO::FETCH_ASSOC);

    if (!empty($result['id']))
    {
        exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
    }
И вроде подобная "штука" работает (происходит следующий "шаг", но вот буквально только что заметил, что при одинаковой паре логин-пароль он не пропускает). Может кто подскажет как поправить?

2.
Было:
PHP:
    $result2 = mysql_query ("INSERT INTO users (login,password) VALUES('$login','$password')");

    if ($result2=='TRUE')
    {
        echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='/index.php'>Главная страница</a>";
    }
    else
    {
        echo "Ошибка! Вы не зарегистрированы.";
    }

Здесь идей у меня особо и не было, пробовал разные варианты:
PHP:
    $sth = $dbh->prepare("INSERT INTO users (login,password) VALUES(:login,:password)");
    $sth->bindParam(":login", $login);//, PDO::PARAM_STR);
    $sth->bindParam(":password", $password);//, PDO::PARAM_STR);
    $sth->execute();

    if ($result2=='TRUE')
    {
        echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='/index.php'>Главная страница</a>";
    }
    else
    {
        echo "Ошибка! Вы не зарегистрированы.";
    }
Но тут понятно, что как бы идёт проверка $result2=='TRUE', что лишено смысла (Соответственно и выдаёт мне при такой конструкции "Ошибка! Вы не зарегистрированы."). Попробовал втупую заменить sth на result2, но, очевидно, эффекта это не возымело. Касаемо "закомментирования" PDO::PARAM_STR - подглядел в реализации веб-части ChatLogging, там тоже через PDO работает

P.S. В PHP я полный 0, но тем не менее хочу попробовать.

Заранее спасибо!
 

Webman

Nevermind
Сообщения
803
Реакции
330
И вроде подобная "штука" работает (происходит следующий "шаг", но вот буквально только что заметил, что при одинаковой паре логин-пароль он не пропускает). Может кто подскажет как поправить?
Такое желательно сразу при регистрации проверять, чтобы не было дублей.
Но тут понятно, что как бы идёт проверка $result2=='TRUE', что лишено смысла (Соответственно и выдаёт мне при такой конструкции "Ошибка! Вы не зарегистрированы."). Попробовал втупую заменить sth на result2, но, очевидно, эффекта это не возымело. Касаемо "закомментирования" PDO::PARAM_STR - подглядел в реализации веб-части ChatLogging, там тоже через PDO работает
Так попробуй
PHP:
$result2 = $sth->execute();
if ($result2) // зареган
 

artray

Участник
Сообщения
24
Реакции
55
$sth = $dbh->prepare("SELECT id FROM users WHERE login=:login");
$sth->bindParam(":login", $login, PDO::PARAM_STR);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);

if (!empty(
$result['id']))
{
exit (
"Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
}

PHP:
$sth = $dbh->prepare("SELECT id FROM users WHERE login=:login");
    $sth->execute(array(':login'=>$login));
if (!empty($sth->fetch(PDO::FETCH_ASSOC)))
    {
        exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
    }

$sth = $dbh->prepare("INSERT INTO users (login,password) VALUES(:login,:password)");
$sth->bindParam(":login", $login);//, PDO::PARAM_STR);
$sth->bindParam(":password", $password);//, PDO::PARAM_STR);
$sth->execute();

if (
$result2=='TRUE')
{
echo
"Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='/index.php'>Главная страница</a>";
}
else
{
echo
"Ошибка! Вы не зарегистрированы.";
}
PHP:
$sth = $dbh->prepare("INSERT INTO users (login,password) VALUES(:login,:password)");
if ($sth->execute(array(":login"=>$login,":password"=>$password)))
    {
        echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='/index.php'>Главная страница</a>";
    }
    else
    {
        echo "Ошибка! Вы не зарегистрированы.";
}
 
Последнее редактирование:
Сверху Снизу