Подключение PHP к MySQL
При использовании PHP для доступа к базе данных, в дополнение к драйверу базы данных, предоставляемому PHP, у нас обычно есть два лучших варианта: PDO и mysql .
Примечание: начиная с PHP 5.5, традиционное расширение MySQL было отменено. Можно использовать только расширение MySQL или расширение PDO, предоставляемое PHP
Разница между PDO и mysqli
| 12 различных драйверов | только MySQL | Поддержка баз данных |
| ООП | ООП + процедурные | ИНТЕРФЕЙС ПРИКЛАДНОГО ПРОГРАММИРОВАНИЯ |
| Легко | Легко | Соединение |
| Да | Нет | Именованные параметры |
| Да | Да | Отображение объектов |
| Да | Нет | Подготовленные заявления (на стороне клиента) |
| Быстро | Быстро | Представление |
| Да | Да | Хранимые процедуры |
Если вашему проекту необходимо переключаться между несколькими базами данных, рекомендуется использовать PDO; если выбран MySQL, вам необходимо переписать весь код при переключении между несколькими базами данных.
MySQL специально разработан для MySQL, поэтому производительность MySQL немного лучше, чем PDO.
Подключение PHP к MySQL
MySQL – объектно-ориентированный метод подключения
Mysqli – метод подключения, ориентированный на процесс
Способ подключения PDO
getMessage(); } ?>
Тесное соединение
Соединение автоматически закрывается после выполнения скрипта. Вы можете использовать следующий код для закрытия соединения:
Mysqli – объектно-ориентированный метод закрытия соединения
$conn->close();
Mysqli – ориентированный на процедуру метод закрытия соединения
mysqli_close($conn);
Способ закрывающего соединения PDO
$conn = null;
Создание базы данных
Создание базы данных MySQL с помощью MySQL и PDO
Использование инструкции create database для создания базы данных
Mysqli – создание баз данных с использованием объектно-ориентированного подхода
connect_error) {
Die ("connection failure:" $conn - > connect error);
}
//Create database
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
Echo "database created successfully";
} else {
echo
"Error creating database: " . $conn->error;
}
$conn->close();
?>Mysqli – создание баз данных с использованием процессно-ориентированного подхода
PDO создать базу данных
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE myDBPDO";
//Use exec() because no results are returned
$conn->exec($sql);
Echo "database created successfully < br >";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>Создать таблицу данных
Использование инструкции CREATE TABLE для создания таблицы данных
Мы создадим таблицу под названием “мои гости” с пятью столбцами: “Идентификатор”, “имя”, “Фамилия”, “электронная почта” и “дата регистрации” . “:
CREATE TABLE MyGuests ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP )
Mysqli – создание таблиц данных с использованием объектно-ориентированного подхода
connect_error) {
Die ("connection failure:" $conn - > connect error);
}
//Using SQL to create data table
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
Echo "error creating data table:" $conn - > error;
}
$conn->close();
?>Mysqli – создание таблиц данных с использованием процессно-ориентированного подхода
PDO создать таблицу данных
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Using SQL to create data table
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
//Using exec(), no result returned
$conn->exec($sql);
Echo "data table myguests created successfully";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>вставка данных
Вставить заявление
INSERT INTO table_name (column1, column2, column3,...)VALUES (value1, value2, value3,...)
Mysqli – вставка данных с использованием объектно-ориентированного подхода
connect_error) {
Die ("connection failure:" $conn - > connect error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]')";
if ($conn->query($sql) === TRUE) {
Echo "new record inserted successfully";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
$conn->close();
?>Mysqli – вставка данных с использованием процессно-ориентированного подхода
[email protected]')";
if (mysqli_query($conn, $sql)) {
Echo "new record inserted successfully";
} else {
echo "Error: " . $sql . "
" . mysqli_error($conn);
}
mysqli_close($conn);
?>Модуль вставки данных
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]')";
//Using exec(), no result returned
$conn->exec($sql);
Echo "new record inserted successfully";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>Вставка нескольких данных
Mysqli – вставка нескольких фрагментов данных объектно-ориентированным способом
connect_error) {
Die ("connection failure:" $conn - > connect error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', '[email protected]')";
if ($conn->multi_query($sql) === TRUE) {
Echo "new record inserted successfully";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
$conn->close();
?>Mysqli – вставка нескольких фрагментов данных с использованием процессно-ориентированного подхода
[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', '[email protected]')";
if (mysqli_multi_query($conn, $sql)) {
Echo "new record inserted successfully";
} else {
echo "Error: " . $sql . "
" . mysqli_error($conn);
}
mysqli_close($conn);
?>PDO вставляет несколько данных
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Start transaction
$conn->beginTransaction();
//SQL statement
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', '[email protected]')");
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', '[email protected]')");
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', '[email protected]')");
//Commit transaction
$conn->commit();
Echo "new record inserted successfully";
}
catch(PDOException $e)
{
//Rollback if execution fails
$conn->rollback();
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>Вставка нескольких фрагментов данных с использованием инструкций предварительной обработки
connect_error) {
Die ("connection failure:" $conn - > connect error);
} else {
$sql = "INSERT INTO MyGuests VALUES(?, ?, ?)";
//Initialize the statement object for mysqli? Stmt? Prepare()
$stmt = mysqli_stmt_init($conn);
//Preprocessing statement
if (mysqli_stmt_prepare($stmt, $sql)) {
//Binding parameters
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
//Set parameters and execute
$firstname = 'John';
$lastname = 'Doe';
$email = '[email protected]';
mysqli_stmt_execute($stmt);
$firstname = 'Mary';
$lastname = 'Moe';
$email = '[email protected]';
mysqli_stmt_execute($stmt);
$firstname = 'Julie';
$lastname = 'Dooley';
$email = '[email protected]';
mysqli_stmt_execute($stmt);
}
}
?>Привязка параметров
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
Эта функция связывает запрос параметра и передает параметр в базу данных. Второй параметр – “SSS”. В следующем списке показаны типы параметров.
- I – целое число
- D – число с плавающей запятой двойной точности
- S – образная строка
- B – Логическое
Оператор предварительной обработки
Предварительная обработка: создайте шаблон инструкции SQL и отправьте его в базу данных. Зарезервированные значения помечаются параметром”?”. Анализ базы данных, компиляция, оптимизация запросов шаблона инструкции SQL и результаты хранения не выводятся. Наконец, значение привязки приложения передается параметру (? “Тег), и база данных выполняет инструкцию
По сравнению с прямым выполнением инструкций SQL преимущества предварительной обработки заключаются в следующем:
- Оператор предварительной обработки значительно сокращает время анализа и выполняет только один запрос (хотя оператор выполняется много раз).
- Параметры привязки снижают пропускную способность сервера. Вам нужно только отправить параметры запроса вместо всего оператора.
- Инструкции предварительной обработки очень полезны для внедрения SQL, поскольку после отправки значений параметров используются различные протоколы для обеспечения достоверности данных.
MySQL использует инструкции предварительной обработки
connect_error)
{
Die ("connection failure:" $conn - > connect error);
}
//Preprocessing and binding
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES(?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
//Set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();
Echo "new record inserted successfully";
$stmt->close();
$conn->close();
?>PDO использует инструкции предварительной обработки
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Preprocessing SQL and binding parameters
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// insert rows
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();
//Insert another row
$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();
//Insert another row
$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();
Echo "new record inserted successfully";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
$conn = null;
?>Запрашивать данные
Mysqli – запрос данных с использованием объектно-ориентированного подхода
connect_error)
{
Die ("connection failure:" $conn - > connect error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
//Output each row of data
while($row = $result->fetch_assoc())
{
echo "
id: ". $row["id"]. " - Name: ". $row["firstname"]. " " . $row["lastname"];
}
} else {
Echo "0 results";
}
$conn->close();
?>Данные запроса PDO
"; echo ""; class TableRows extends RecursiveIteratorIterator { function __construct($it) { parent::__construct($it, self::LEAVES_ONLY); } function current() { return " Id Firstname Lastname Reg date " . parent::current(). " "; } function beginChildren() { echo ""; } function endChildren() { echo " " . "\n"; } } $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("SELECT * FROM MyGuests"); $stmt->execute(); //Set result set as associative array $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { echo $v; } $dsn = null; } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } $conn = null; echo ""; ?>
Используйте предложение where
Предложение where используется для извлечения записей, соответствующих указанным критериям.
Синтаксис:
SELECT column_name(s) FROM table_name WHERE column_name operator value
Пример:
"; } ?>
Заказ по ключевому слову
Ключевое слово order by используется для сортировки данных в наборе записей. Значение по умолчанию-по возрастанию.
Синтаксис:
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC
Пример:
"; } mysqli_close($con); ?>
Сортировка по двум столбцам
Вы можете сортировать по нескольким столбцам
При сортировке по нескольким столбцам второй столбец используется только в том случае, если значения первого столбца совпадают:
SELECT column_name(s) FROM table_name ORDER BY column1, column2
Обновление данных обновления
Инструкция update используется для обновления записи, которая уже существует в таблице базы данных.
Синтаксис:
UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value
Примечание: если предложение where опущено, все записи будут обновлены!
Предположим, вы создали таблицу персон:
| 35 | Грифон | Питер |
| 33 | Трясина | Гленн |
Обновить таблицу персон
После обновления:
| 36 | Грифон | Питер |
| 33 | Трясина | Гленн |
Удалить удалить данные
Инструкция delete используется для удаления строки из таблицы базы данных.
Синтаксис:
DELETE FROM table_name WHERE some_column = some_value
Примечание: если предложение where опущено, все записи будут удалены!
Предположим, что есть человек за столом
| 35 | Грифон | Питер |
| 33 | Трясина | Гленн |
В следующем примере удаляются все записи таблицы “лица”:
После удаления данных:
| 33 | Трясина | Гленн |
Справочные ресурсы
- Расширение базы данных
- Драйверы и плагины MySQL
- В чем разница и выбор между PDO и mysqli?
- База данных PHP