Просто начал работать с 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).
"...dbname = db"
. Поскольку db
заключен в двойные кавычки и будет интерпретироваться как строка вместо константы. Вы не можете иметь пробелы в своем 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);