Подключение с использованием PDO
159 просмотра
2 ответа
Только начал работать с 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 Источник Размещён: 13.11.2019 11:32Ответы (2)
1 плюс
Проблема вызвана 2-мя синтаксическими ошибками в имени источника данных (DSN) (первый аргумент в строке подключения PDO).
Ошибки
- Вы не можете передать свою константу db в строку подключения как
"...dbname = db"
. Такdb
как заключено в двойные кавычки и будет интерпретироваться как строка вместо константы. Вы не можете иметь пробелы в своем 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.
Автор: Jonathan Spiller Размещён: 14.11.2012 08:450 плюса
Идентификаторы константы должны быть в верхнем регистре:
define('USER','root');
Если вы хотите использовать константы, вы можете сделать это следующим образом:
$dbh = new PDO("mysql:host = ". HOST .";dbname=" . DB ,USER,PASS);
Автор: user225269
Размещён: 14.11.2012 05:57
Вопросы из категории :
- php Как вы отлаживаете PHP-скрипты?
- php Заставьте XAMPP / Apache обслуживать файл вне htdocs
- php Как включить файлы PHP, которые требуют абсолютного пути?
- php Скрипт входа со скрытыми кнопками
- php How can I find unused functions in a PHP project
- php Эффективное изменение размера JPEG изображения в PHP
- php MySQL или PDO - каковы плюсы и минусы?
- php Как бы вы внедрили аутентификацию на основе FORM без резервной базы данных?
- php Самый простой способ профилировать скрипт PHP
- php Изображения в PHP
- pdo Are PDO prepared statements sufficient to prevent SQL injection?
- pdo Могут ли операторы PHP PDO принимать имя таблицы или столбца в качестве параметра?
- pdo Как создать параметризованный запрос PDO с помощью оператора LIKE?
- pdo В чем преимущество использования try {} catch {} против if {} else {}
- pdo эквивалент mysql_data_seek pdo
- pdo Количество строк с PDO
- pdo Автоматически обрезать строки до нужной длины при вставке
- pdo PDO Prepared Вставляет несколько строк в одном запросе
- pdo В чем разница между bindParam и bindValue?