Пример соединения с MySQL через PDO класс

В этой статье мы рассмотрим, как создать соединение с MySQL базой данных используя PHP и PDO.  Почему будет использовано именно PDO? – из-за отличных скоростных показателей,  а так же использование PDO::prepare() предотвращает возможные SLQ-инъекции, через попытку вызова метода PDO::quote(). К  тому же в PDO поддерживается работа с различными типами баз данных, что опять же стоит записать в колонку «+».  Что ж, давайте обратимся к коду:

<?php
$hostname = "localhost";
$username = "your_username";
$password = "your_password";
 
try {
$dbh = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password);
echo "Соединение установлено; // проверка соединения
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>

 

Fatal Error новая сущность PDO
Стоит обратить внимание на следующий тип ошибки, которая может возникнуть при выполнении вашего кода:

<?php
Fatal error: Uncaught exception "PDOException" with message "SQLSTATE[42000]
[1049] Unknown database ""user""" in

C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\trunk\code\login\1
\classes\std.pdo_singleton.class.inc:30

Stack trace: #0 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test
\trunk\code\login\1\classes\std.pdo_singleton.class.inc(30):

PDO->__construct("mysql:host=loca...", "howtopr1_vkim", "htmys2007")
#1 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\trunk\code
\login\1\classes\std.mysql.class_test.inc(43): db::getConnect()

#2 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\trunk\code
\login\1\connect.php(6): MySqlDb->confirmUserPass("usertest", "passtest")

#3 {main} thrown in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs
\test\trunk\code\login\1\classes\std.pdo_singleton.class.inc on line 30

?>
 

 

Такая ошибка может возникнуть в результате опечатки, при использовании лишних кавычек в коде для параметров host и/или dbname. Следующий код приведет к подобной ошибке:

<?php
$dbh = new PDO("mysql:host="localhost";dbname="mysql"", $username, $password);
?>

 

Если вы не используете переменные, то не стоит и использовать одинарные кавычки  для параметров host и dbname. В этом случае, лучше переписать код следующим образом:

<?php
$dbh = new PDO("mysql:host=localhost;dbname=mysql", $username, $password);
?>

 

Для справки: если Вы, например, желаете соединиться с PostgreSQL, другая популярная база данных, используйте следующий код вместо кода предыдущего из примера:

<?php
$db = new PDO("pgsql:dbname=pdo;host=localhost", "username", "password" );
?>

 

Если при разработке возникает необходимость вывода сообщений об ошибках на экран, это реализуется через установку параметра “on” для  display_errors в php.ini и путем внедрения следующего кода:

 

<?php
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
Доступны три типа (вида) отчетов об ошибках. Переключение осуществляется через управляющие параметры DO::ATTR_ERRMODE:
  • PDO::ERRMODE_SILENT = коды ошибок
  • PDO::ERRMODE_WARNING = E_WARNING
  • PDO::ERRMODE_EXCEPTION = Throw exceptions
<?php
$hostname = "localhost";
$username = "howtopr1_vkim";
$password = "htmys2007";
 
try {
$db = new PDO("mysql:host=$hostname;dbname=articles", $username, $password);
 
echo "Соединение установлено; // проверка соединения
 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
 
$sql = "Select * from tutorialref where id=1";
$result = $db->query($sql);
foreach ($result as $row) {
echo $row["id"] ." - ". $row["author"] . "<br />";
}
 
$db = null; // закрыть соединение
 
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>

Не путайте это с ошибками генерируемые  error_reporting в соответствии с настройками PHP. Ошибки от PDO:: ATTR_ERRMODE относятся к запросу sql и его результатам.

 

Добавить комментарий


Защитный код
Обновить

Разработчику

Скрипты