Intereting Posts
Проверьте, нет ли переменной пустой Создайте страницу WordPress, перенаправляющую на другой URL-адрес Пользовательский URL для каждого пользователя в PHP Написание / Рисование над документом шаблона PDF в PHP PHP-загрузка файлов Как сериализовать форму, хранящуюся в переменной jQuery Как отправить HTML-форматированную почту с помощью PHP .htaccess – перенаправление субдомена в папку Неизвестный модификатор '(' при использовании preg_match () с выражением REGEX PHP – установка файлов cookie и перенаправление Как загрузить фотографии в альбом с помощью API-интерфейса Facebook Graph Создание пользовательского расширения PHP (.so) Невозможно повторно назначить автоматически-глобальную переменную _POST Как перенаправить или показать страницу, а не «Запрещено», когда у меня отключены списки каталогов (htaccess / unix) Вызов функции объекта данных при загрузке (SilverStripe)

Соединение с использованием PDO

Просто начал работать с 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(); } ?> 

Кроме того, вы можете ознакомиться с некоторыми учебниками или ebook для PDO, о которых вы знаете. Заранее спасибо.

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

Ошибки

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

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

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

  • В частности, кажется, что пробел между host и first = sign вызывает проблему. Если есть пробел, он будет эхом "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: PDOs

Константные идентификаторы должны быть прописными:

  define('USER','root'); 

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

 $dbh = new PDO("mysql:host = ". HOST .";dbname=" . DB ,USER,PASS);