Вопрос:

Подключение с использованием PDO

php pdo

159 просмотра

2 ответа

22 Репутация автора

Только начал работать с PDO. Пожалуйста, объясните мне ошибку в моем соединении. Всегда отображается сообщение «Вы подключены».

    <?php

       define('user','root');
       define('pass','');
       define('db','login_db');

       try
          {
       $dbh = new PDO("mysql:host = localhost; dbname = db",user,pass);
       echo "You are connected";
          }
       catch(PDOException $e)
          {
       echo $e -> getMessage(); 
          }
    ?>

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

Автор: user1814913 Источник Размещён: 14.11.2012 05:51

Ответы (2)


0 плюса

4842 Репутация автора

Идентификаторы константы должны быть в верхнем регистре:

 define('USER','root');

Если вы хотите использовать константы, вы можете сделать это следующим образом:

$dbh = new PDO("mysql:host = ". HOST .";dbname=" . DB ,USER,PASS);
Автор: user225269 Размещён: 14.11.2012 05:57

1 плюс

1573 Репутация автора

Решение

Проблема вызвана 2-мя синтаксическими ошибками в имени источника данных (DSN) (первый аргумент в строке подключения PDO).

Ошибки

  1. Вы не можете передать свою константу db в строку подключения как "...dbname = db". Так dbкак заключено в двойные кавычки и будет интерпретироваться как строка вместо константы.
  2. Вы не можете иметь пробелы в своем DSN. Так должно быть:

    "mysql:host=localhost;dbname=login_db" //no spaces.
    

Я проверил это, и он демонстрирует странное поведение:

  • В частности, кажется, что пробел между hostпервым =знаком и вызывает проблему. Если есть пробел, он будет отображаться, "You are connected"даже если "localhost" написан с ошибкой.
  • Аналогично, если между пробелом dbnameи его =знаком есть пробел , он будет подключаться, даже если указанное имя базы данных неверно.

Я предполагаю, что это некоторая странность того, как класс PDO анализирует DSN.

Решение

Удалите все пробелы из DSN.

Вам также нужно передать имя вашей базы данных другим способом. Есть разные способы исправить это. Я бы порекомендовал, чтобы не было ошибок, связанных с отладкой, чтобы вы использовали переменные вместо константных определений:

$host = 'localhost';
$user = 'root';
$pass = '';
$db   = 'login_db';

try{
    $dbh = new PDO("mysql:host=$host;dbname=$db",$user,$pass);
    echo "You are connected";
}
catch(PDOException $e){
    echo $e -> getMessage(); 
}

Что касается хороших уроков, вы можете посмотреть на них:

Net.tuts +: доступ к базе данных PHP

Net.tuts +: зачем использовать PDO

И, конечно же, не забудьте про документы php.net.

php.net: PDO

Автор: Jonathan Spiller Размещён: 14.11.2012 08:45
Вопросы из категории :
32x32