Рубрики
Uncategorized

Краткое руководство по PHP — MySQL

Автор оригинала: David Wong.

Подключение 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 – объектно-ориентированный метод подключения

php
$servername = "localhost";
$username = "username";
$password = "password";
//Create connection
$conn = new mysqli($servername, $username, $password);
//Test connection
if ($conn->connect_error) {
    Die ("connection failure:" $conn - > connect error);
}
Echo "connection succeeded";
?>

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 "IdFirstnameLastnameEmailReg date            ";
class TableRows extends RecursiveIteratorIterator {
    function __construct($it) { 
        parent::__construct($it, self::LEAVES_ONLY); 
    }
    function current() {
        return "" . 
        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