PDO

Раньше для соединения с базой данных использовались функции вида mysql_, которые на данный момент считаются устаревшими. В PHP7 их даже удалили.

На смену пришли функции вида mysqli_, которые ещё работают.

Более прогрессивный способ - использовать PDO. PDO - это объект и его можно использовать в ООП.

Простейшая конструкция соединения с базой данных.


<?php
    try{
	    $pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8', 'dbuser', 'mypassword');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$output = 'Соединение с базой данных установлено.';
	}
	catch (PDOException $e) {
		$output = 'Не могу соединиться с базой данных: ' . $e;
	}
	
	include __DIR__ . '/templates/output.html.php';
?>

Вы указываете хост базы данных, имя базы данных, пользователя и пароль. В принципе, всё тоже самое. В успешном случае в переменную $output передаём строку об успешности соединения. При ошибке будет выброшено исключение. В сценарии загружается отдельная страница output.html.php.


<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Скрипт</title>
</head>
<body>

<?php echo $output; ?>
	
</body>
</html>

Для вывода более точной информации в случае ошибки (имя файла, строка кода), можно немного переписать блок catch:


catch (PDOException $e) {
	$output = 'Не могу соединиться с базой данных: ' . 
	$e->getMessage() . ' in ' .
	$e->getFile() . ':' . $e->getLine();
}

Для запросов используется формат.


$pdo->exec($query)

В секции try после установки соединения, можем добавить запрос для создания таблицы.


$sql = 'CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
sometext TEXT,
somedate DATE NOT NULL
) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB';

$pdo->exec($sql);
$output = 'Таблица успешно создана';

Запрос для модификации записей в таблице. Метод exec возвращает число рядов таблицы, которые были использованы в результате запроса.


try{
    $pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8', 'dbuser', 'mypassword');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	//$output = 'Соединение с базой данных установлено.';
	$sql = 'UPDATE mytable SET somedate="2018-04-01"
	    WHERE sometext LIKE "%cat%"';
		
	$affectedRows = $pdo->exec($sql);
	$output = 'Обновлено строк: ' . $affectedRows;
}

SELECT

При запросах с участием SELECT используется другой вариант, позволяющий получать ответы от запроса.

Вместо exec используется метод query, в котором указывается запрос в качестве параметра. Метод возвращает объект PDOStatement.

Реклама