Подключение 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