Verification: a143cc29221c9be0

Php code for mysql update

Php code for mysql update

Предварительные требования

Для целей этого краткого руководства понадобится:

  • Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.

  • Создание отдельного сервера Базы данных Azure для MySQL с помощью портала Azure
    или с помощью Azure CLI, если он еще не создан.

  • Выполнить ОДНО из действий (в зависимости от того, пользуетесь вы общим или частным доступом), чтобы настроить возможность подключения.

    Действие Метод подключения Практическое руководство
    Настройка правил брандмауэра Общие Портал
    CLI
    Настройка конечной точки службы Общие Портал
    CLI
    Настройка приватного канала Private Портал
    CLI
  • Создание базы данных и пользователя без прав администратора.

  • Установка последней версии PHP для вашей операционной системы:

    • PHP в macOS;
    • PHP в Linux;
    • PHP в Windows

Примечание

При работе с этим кратким руководством мы используем библиотеку MySQLi для управления подключением и выполнения запросов к серверу.

Получение сведений о подключении

Чтобы получить сведения о подключении сервера базы данных с портала Azure, выполните следующие действия.

  1. Войдите на портал Azure.

  2. Перейдите на страницу Базы данных Azure для MySQL. Найдите и выберите База данных Azure для MySQL. Поиск Базы данных Azure для MySQL

  3. Выберите свой сервер MySQL (например, mydemoserver).

  4. На странице Обзор скопируйте полное имя сервера рядом с полем Имя сервера и имя администратора рядом с полем Имя для входа администратора сервера. Чтобы скопировать имя сервера или имя узла, наведите на него указатель мыши и щелкните значок копирования.

Важно!

  • Если вы забыли свой пароль, его можно сбросить.
  • Замените значения параметров host, username, password и db_name своими значениями**.

Шаг 1. Подключение к серверу

Протокол SSL включен по умолчанию. Для подключения из локальной среды может потребоваться скачать SSL-сертификат DigiCertGlobalRootG2. Этот код вызывает:

  • mysqli_init для инициализации MySQLi.
  • mysqli_ssl_set для указания пути SSL-сертификата. Это необходимо для локальной среды, но не требуется для веб-приложения Службы приложений или виртуальных машин Azure.
  • mysqli_real_connect для подключения к MySQL.
  • mysqli_close для закрытия подключения.
$host = 'mydemoserver.mysql.database.azure.com';
$username = 'myadmin@mydemoserver';
$password = 'your_password';
$db_name = 'your_database';

//Initializes MySQLi
$conn = mysqli_init();

mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/DigiCertGlobalRootG2.crt.pem", NULL, NULL);

// Establish the connection
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin@mydemoserver', 'yourpassword', 'quickstartdb', 3306, NULL, MYSQLI_CLIENT_SSL);

//If connection failed, show the error
if (mysqli_connect_errno())
{
    die('Failed to connect to MySQL: '.mysqli_connect_error());
}

Возникли проблемы? Сообщите нам об этом

Шаг 2. Создание таблицы

Для подключения используйте следующий код. Этот код вызывает:

  • mysqli_query для запуска запроса.
// Run the create table query
if (mysqli_query($conn, '
CREATE TABLE Products (
`Id` INT NOT NULL AUTO_INCREMENT ,
`ProductName` VARCHAR(200) NOT NULL ,
`Color` VARCHAR(50) NOT NULL ,
`Price` DOUBLE NOT NULL ,
PRIMARY KEY (`Id`)
);
')) {
printf("Table created\n");
}

Шаг 3. Добавление данных

Используйте указанный ниже код с инструкцией SQL INSERT для вставки данных. Этот код использует методы:

  • mysqli_prepare для создания подготовленной инструкции INSERT.
  • mysqli_stmt_bind_param для привязки параметров для каждого вставленного значения столбца.
  • mysqli_stmt_execute.
  • mysqli_stmt_close для закрытия инструкции с помощью метода.
//Create an Insert prepared statement and run it
$product_name = 'BrandNewProduct';
$product_color = 'Blue';
$product_price = 15.5;
if ($stmt = mysqli_prepare($conn, "INSERT INTO Products (ProductName, Color, Price) VALUES (?, ?, ?)"))
{
    mysqli_stmt_bind_param($stmt, 'ssd', $product_name, $product_color, $product_price);
    mysqli_stmt_execute($stmt);
    printf("Insert: Affected %d rows\n", mysqli_stmt_affected_rows($stmt));
    mysqli_stmt_close($stmt);
}

Шаг 4. Чтение данных

Используйте указанный ниже код с инструкцией SQL SELECT для чтения данных. Этот код использует методы:

  • mysqli_query для выполнения запроса SELECT.
  • mysqli_fetch_assoc для получения результирующих строк.
//Run the Select query
printf("Reading data from table: \n");
$res = mysqli_query($conn, 'SELECT * FROM Products');
while ($row = mysqli_fetch_assoc($res))
 {
    var_dump($row);
 }

Шаг 5. Удаление данных

Используйте указанный ниже код с инструкцией SQL DELETE для удаления строк. Этот код использует методы:

  • mysqli_prepare для создания подготовленной инструкции DELETE.
  • mysqli_stmt_bind_param для привязки параметров.
  • mysqli_stmt_execute для создания подготовленной инструкции DELETE.
  • mysqli_stmt_close для закрытия инструкции.
//Run the Delete statement
$product_name = 'BrandNewProduct';
if ($stmt = mysqli_prepare($conn, "DELETE FROM Products WHERE ProductName = ?")) {
mysqli_stmt_bind_param($stmt, 's', $product_name);
mysqli_stmt_execute($stmt);
printf("Delete: Affected %d rows\n", mysqli_stmt_affected_rows($stmt));
mysqli_stmt_close($stmt);
}

Очистка ресурсов

Чтобы очистить все ресурсы, используемые во время этого краткого руководства, удалите группу ресурсов с помощью следующей команды:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Предварительные требования

Для работы с этим руководством сделайте следующее:

  1. установите Git;
  2. PHP 5.6.4 или более поздней версии;
  3. Composer;
  4. Включите следующие расширения PHP, необходимые для Laravel: OpenSSL, PDO-MySQL, Mbstring, Tokenizer и XML.
  5. MySQL (этот компонент потребуется запустить).

Подготовка локальной базы данных MySQL

На этом шаге вы создадите базу данных на локальном сервере MySQL для использования в этом руководстве.

Подключение к локальному серверу MySQL

В окне терминала подключитесь к локальному серверу MySQL. Используйте это окно терминала для выполнения всех команд в рамках этого руководства.

mysql -u root -p

Если появится предложение ввести пароль, введите пароль для учетной записи root. Если вы не помните пароль учетной записи привилегированного пользователя, ознакомьтесь с разделом MySQL: How to Reset the Root Password (MySQL: как сбросить пароль привилегированного пользователя).

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

Локальное создание базы данных

В командной строке mysql создайте базу данных.

CREATE DATABASE sampledb;

Завершите подключение к серверу, введя команду quit.

quit

Локальное создание приложения PHP

На этом шаге вы создадите пример приложения Laravel, настроите его подключение к базе данных и запустите это приложение в локальной среде.

Клонирования репозитория

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

git clone https://github.com/Azure-Samples/laravel-tasks

С помощью команды cd перейдите в клонированный каталог. Установите необходимые пакеты.

cd laravel-tasks
composer install

Настройка подключения к MySQL

В корне репозитория создайте файл .env. Скопируйте в файл .env приведенные ниже переменные. Замените заполнитель паролем привилегированного пользователя MySQL.

APP_ENV=local
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=sampledb
DB_USERNAME=root
DB_PASSWORD=

Сведения о том, как Laravel использует файл .env, см. в разделе Environment Configuration (Конфигурация среды).

Локальный запуск примера

Выполните перенос базы данных Laravel, чтобы создать таблицы, необходимые для приложения. Чтобы узнать, какие таблицы создаются при переносе, просмотрите каталог database/migrations в этом репозитории Git.

php artisan migrate

Создайте ключ приложения Laravel.

php artisan key:generate

Запустите приложение.

php artisan serve

Откройте браузер и перейдите по адресу http://localhost:8000. Добавьте несколько задач на странице.

Приложение PHP успешно подключается к базе данных MySQL

Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Создание гибкого сервера MySQL (предварительная версия).

На этом шаге вы создадите базу данных MySQL в режиме развертывания База данных Azure для MySQL (Гибкий сервер), который предоставляется в общедоступной предварительной версии. Позже вы настроите приложение PHP для подключения к этой базе данных. Запустите Azure Cloud Shell и создайте сервер, выполнив команду az flexible-server create.

az mysql flexible-server create  --resource-group myResourceGroup --public-access 

Важно!

  • Запишите значения имени сервера и строки подключения, чтобы применить их на следующем шаге для подключения к Laravel и запуска переноса данных.
  • Для аргумента IP-Address укажите IP-адрес клиентского компьютера. Созданный сервер сразу блокируется, и для локального управления этим сервером необходимо разрешить доступ клиентскому компьютеру.

Настройка брандмауэра сервера для подключения веб-приложения к серверу

В Cloud Shell создайте правило брандмауэра для сервера MySQL, чтобы разрешить подключения клиентов, выполнив команду az mysql server firewall-rule create. Если для начального и конечного IP-адресов задано значение 0.0.0.0, брандмауэр открывается только для тех служб Azure, которые не используют статические IP-адреса для подключения к серверу.

az mysql flexible-server firewall-rule create --name allanyAzureIPs --server  --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

Локальное подключение к серверу рабочей базы данных MySQL

В окне терминала на локальном компьютере подключитесь к серверу MySQL в Azure. Используйте значение, указанное ранее для и . При появлении запроса на ввод пароля используйте пароль, указанный во время создания базы данных в Azure.

mysql -u  -h .mysql.database.azure.com -P 3306 -p

Создание рабочей базы данных

В командной строке mysql создайте базу данных.

CREATE DATABASE sampledb;

Создание пользователя с разрешениями

Создайте пользователя базы данных с именем phpappuser и предоставьте ему все привилегии в базе данных sampledb. Для простоты в этом руководстве используется пароль MySQLAzure2020.

CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2020';
GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';

Завершите подключение к серверу, введя команду quit.

quit

Подключение приложения к гибкому серверу MySQL

На этом шаге вы подключите приложение PHP к базе данных MySQL, созданной в Базе данных Azure для MySQL.

Настройка подключения к базе данных

В корневой папке репозитория создайте файл .env.production и скопируйте в него следующие переменные. Замените заполнитель в значениях DB_HOST и DB_USERNAME.

APP_ENV=production
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=.mysql.database.azure.com
DB_DATABASE=sampledb
DB_USERNAME=phpappuser
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true

Сохраните изменения.

Совет

Чтобы защитить сведения о подключении к MySQL, этот файл извлекается из репозитория Git (см. файл .gitignore в корне репозитория). Позже вы узнаете, как настроить переменные среды в службе приложений для подключения к базе данных в Базе данных Azure для MySQL. Благодаря этим переменным вам не нужен файл .env в службе приложений.

Настройка TLS/SSL-сертификата

По умолчанию гибкий сервер MySQL требует, чтобы клиенты использовали подключения по протоколу TLS. Чтобы подключиться к базе данных MySQL в Azure, вам потребуется сертификат с расширением PEM, предоставленный службой "База данных Azure для MySQL (Гибкий сервер)". Скачайте этот сертификат и поместите его в папку SSL в локальной копии репозитория с примером приложения.

Откройте файл config/database.php и добавьте в connections.mysql параметры sslmode и options, как показано в следующем коде.

'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL') && extension_loaded('pdo_mysql')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/DigiCertGlobalRootCA.crt.pem',
    ] : []
],

Локальное тестирование приложения

Выполните перенос базы данных Laravel с помощью файла .env.production, указав его как файл среды, чтобы создать таблицы в базе данных MySQL, размещенной в Базе данных Azure для MySQL. Помните, что файл .env.production содержит сведения о подключении к базе данных MySQL в Azure.

php artisan migrate --env=production --force

Файл .env.production еще не содержит действительный ключ приложения. Создайте для него новый ключ в окне терминала.

php artisan key:generate --env=production --force

Запустите пример приложения, указав файл .env.production как файл среды.

php artisan serve --env=production

Перейдите на страницу http://localhost:8000. Если страница загрузилась без ошибок, значит, приложение PHP подключается к базе данных MySQL в Azure.

Добавьте несколько задач на странице.

Подключение приложения PHP к Базе данных Azure для MySQL

Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Фиксация изменений

Чтобы зафиксировать изменения, выполните следующие команды Git:

git add .
git commit -m "database.php updates"

Ваше приложение готово к развертыванию.

Развертывание в Azure

На этом шаге вы развернете приложение PHP, подключенное к базе данных MySQL, в службе приложений Azure.

Настойка пользователя развертывания

Для развертывания в веб-приложение Azure из FTP и локального репозитория Git можно использовать пользователя развертывания. Настроив один раз пользователя развертывания, вы сможете использовать его для всех последующих развертываний в Azure. Имя пользователя и пароль учетной записи развертывания отличаются от учетных данных подписки Azure.

Чтобы настроить пользователя развертывания, выполните в Azure Cloud Shell команду az webapp deployment user set. Вместо и укажите имя пользователя и пароль для вашего развертывания.

Имя пользователя должно быть уникальным в Azure. Кроме того, чтобы отправка в локальный репозиторий Git работала, имя пользователя не должно содержать символ @. Пароль должен содержать не менее восьми символов и включать два из трех следующих элементов: буквы, цифры и символы.

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku F1 --is-linux

В выходных данных JSON пароль отображается как NULL. Если вы видите сообщение "Conflict. Сведения. Ошибка 409", измените имя пользователя. Если вы видите сообщение об ошибке "Bad Request. Сведения. Ошибка 400", используйте более надежный пароль. Запишите имя пользователя и пароль и используйте их для развертывания веб-приложений.

Создание плана службы приложений

В Cloud Shell создайте план службы приложений в группе ресурсов, выполнив команду az appservice plan create. В следующем примере создается план Службы приложений с именем myAppServicePlan в ценовой категории "Бесплатный" (--sku F1) в контейнере Linux (--is-linux).

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku F1 --is-linux

Создание веб-приложения

Создайте веб-приложение в плане Службы приложений myAppServicePlan.

В Cloud Shell для этого можно использовать команду az webapp create. В следующем примере замените глобальным уникальным именем приложения (допустимые символы: a-z, 0-9 и -). Для среды выполнения установлено значение PHP|7.0. Чтобы просмотреть все поддерживаемые среды выполнения, выполните команду az webapp list-runtimes --linux.

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name  --runtime "PHP|7.3" --deployment-local-git

Когда веб-приложение будет создано, в Azure CLI отобразится примерно следующее:

Local git is configured with url of 'https://@.scm.azurewebsites.net/.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": ".azurewebsites.net",
  "deploymentLocalGitUrl": "https://@.scm.azurewebsites.net/.git",
  "enabled": true,
  
}

Вы создали пустое веб-приложение с включенным развертыванием Git.

Примечание

URL-адрес удаленного репозитория Git отображается в свойстве deploymentLocalGitUrl в таком формате: https://@.scm.azurewebsites.net/.git. Сохраните этот URL-адрес для дальнейшего использования.

Настройка параметров базы данных

В службе приложений переменные среды задаются в качестве параметров приложения с помощью команды az webapp config appsettings set.

Команда ниже позволяет настроить параметры приложения DB_HOST, DB_DATABASE, DB_USERNAME и DB_PASSWORD. Замените заполнители и .

az webapp config appsettings set --name  --resource-group myResourceGroup --settings DB_HOST=".mysql.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="phpappuser" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"

Для доступа к параметрам можно использовать метод PHP getenv. В коде Laravel используется программа-оболочка env для PHP getenv. Например, конфигурация MySQL в файле config/database.php выглядит следующим образом:

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    ...
],

Настройка переменных среды Laravel

В среде Laravel требуется ключ приложения из службы приложений. Его можно настроить с помощью параметров приложения.

В окне терминала на локальном компьютере используйте php artisan для создания ключа приложения без сохранения в файле .env.

php artisan key:generate --show

В Cloud Shell задайте ключ приложения в приложении Службы приложений с помощью команды az webapp config appsettings set. Замените заполнители и .

az webapp config appsettings set --name  --resource-group myResourceGroup --settings APP_KEY="" APP_DEBUG="true"

Значение APP_DEBUG="true" указывает Laravel возвращать отладочную информацию в случае ошибок в работе развернутого приложения. При выполнении рабочего приложения задайте для него более безопасное значение false.

Задание пути виртуального приложения

Жизненный цикл приложения Laravel начинается в общем каталоге, а не в корневом каталоге приложения. Образ PHP Docker по умолчанию для службы приложений использует Apache и не позволяет настраивать DocumentRoot для Laravel. Тем не менее вы можете использовать .htaccess для повторного создания всех запросов к точке в каталоге /public вместо корневого каталога. В корне репозитория для этой цели уже добавлен .htaccess. С ним приложение Laravel будет готово к развертыванию.

См. подробнее об изменении корневого каталога сайта.

Публикация в Azure из Git

Вернитесь к окну терминала (в локальном расположении) и добавьте удаленное приложение Azure в локальный репозиторий Git. Замените URL-адресом удаленного репозитория Git, который вы сохранили при создании веб-приложения.

git remote add azure 

Отправьте код в удаленное приложение Azure, чтобы развернуть приложение. При появлении запроса на ввод учетных данных в диспетчере учетных данных Git введите учетные данные, созданные на шаге настройки пользователя развертывания (а не те, которые используются для входа на портал Azure).

git push azure main

Выполнение этой команды может занять несколько минут. При выполнении эта команда выводит приблизительно следующие сведения:

Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Updating branch 'main'.
remote: Updating submodules.
remote: Preparing deployment for commit id 'a5e076db9c'.
remote: Running custom deployment command...
remote: Running deployment command...
...

Переход к приложению Azure

Перейдите по адресу http://.azurewebsites.net и добавьте несколько задач в список.

Веб-приложение PHP в Azure

Вы запустили управляемое данными приложение PHP в службе приложений Azure.

Локальное обновление и повторное развертывание модели

На этом шаге вы внесете некоторые изменения в модель данных task и веб-приложение, а затем опубликуете обновления в Azure.

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

Добавление столбца

В окне терминала на локальном компьютере перейдите к корневой папке репозитория Git.

Создайте перенос базы данных для таблицы tasks:

php artisan make:migration add_complete_column --table=tasks

Эта команда отображает имя файла переноса, который создается. Найдите этот файл в каталоге database/migrations и откройте его.

Замените метод up следующим кодом:

public function up()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->boolean('complete')->default(False);
    });
}

Предыдущий код добавляет столбец логических значений complete в таблицу tasks.

Замените метод down следующим кодом действия отката:

public function down()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->dropColumn('complete');
    });
}

В окне терминала на локальном компьютере выполните перенос базы данных Laravel, чтобы внести изменения в локальную базу данных.

php artisan migrate

В соответствии с условиями соглашения об именовании Laravel модель Task (см. app/Task.php) сопоставляется с таблицей tasks по умолчанию.

Обновление логики приложения

Откройте файл routes/web.php. В нем приложение определяет свои маршруты и бизнес-логику.

В конце файла добавьте маршрут с помощью следующего кода.

/**
 * Toggle Task completeness
 */
Route::post('/task/{id}', function ($id) {
    error_log('INFO: post /task/'.$id);
    $task = Task::findOrFail($id);

    $task->complete = !$task->complete;
    $task->save();

    return redirect('/');
});

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

Обновление представления

Откройте файл resources/views/tasks.blade.php. Найдите открывающий тег и замените его приведенным ниже значением.


Предыдущий код изменяет цвет строк в зависимости от того, завершена ли задача.

Следующая строка содержит приведенный ниже код.

{{ $task->name }}

Замените всю эту строку следующим кодом.


    
{{ csrf_field() }} {{ $task->name }}

Предыдущий код добавляет кнопку "Submit" (Отправить), которая ссылается на маршрут, определенный ранее.

Локальная проверка изменений

В окне терминала на локальном компьютере запустите сервер разработки из корневого каталога репозитория Git.

php artisan serve

Чтобы увидеть, как изменится состояние задачи, перейдите по адресу http://localhost:8000 и установите флажок.

Добавлен флажок для задачи

Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Публикация изменений в Azure

В окне терминала на локальном компьютере выполните перенос базы данных Laravel со строкой подключения рабочей базы данных, чтобы внести изменения в базу данных в Azure.

php artisan migrate --env=production --force

Зафиксируйте все изменения в Git, а затем отправьте изменения кода в Azure.

git add .
git commit -m "added complete checkbox"
git push azure main

После выполнения команды git push перейдите в приложение Azure и проверьте новые функции.

Изменения модели и базы данных, опубликованные в Azure

Добавленные задачи сохраняются в базе данных. Изменения в схеме данных не влияют на имеющиеся данные.

Очистка ресурсов

На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду в Cloud Shell:

az group delete --name myResourceGroup

Создание Таблицы (По необходимости)

Прежде всего, нам нужно создать таблицу для ваших данных. Если она у вас уже есть, смело переходите к следующему разделу. Процедура очень простая. Создать таблицу можно в phpMyAdmin из вашей панели управления хостингом.

phpMyAdmin в Панели Управления Хостингом Hostinger

После входа на страницу phpMyAdmin вы увидите подобную картину:

Меню phpMyAdmin

Давайте создадим таблицу с названием Students для нашей базы данных u104357129_name. Создать новую таблицу можно, нажав на кнопку Create Table. После этого вы увидите новую страницу со всеми необходимыми полями для ввода данных.

Окно с Полями для Создания Таблицы MySQL

Поскольку создание таблицы не основная тема этого руководства, мы не будем углубляться в подробности. Если вам нужно больше информации о структуре таблицы/базы данных и о том, какие настройки вы можете использовать для каждого столбца, рекомендуем обратиться к официальной документации phpMyAdmin (англ.).

Здесь приведём лишь несколько простых пояснение столбцов, которые мы будем использовать:

  • Name — это имя столбца. Будет отображено в самом верху вашей таблицы.
  • Type — тип ваших данных. Вы можете указать любой тип: int, varchar, string и многие другие. Например, мы указали varchar, поскольку нам нужно ввести строку переменной длины, содержащую буквы, не цифры.
  • Length/Values — используется для задания максимальной длины вашей записи в столбце.
  • Index — для нашего поля “ID” мы используем индекс “Primary”. Когда создаётся таблица, рекомендуется иметь один столбец ID. Он используется для индексации записей в таблице, когда настраиваются взаимосвязи между таблицами. Здесь также можно отметить “A_I”, что означает Auto Increment. Эта настройки будет автоматически увеличивать индекс (1,2,3,4…).

Нажмите Save, чтобы сохранить вашу таблицу.

Создание PHP Кода и Добавление Записи в Таблицу MySQL (Insert)

Есть два способа вставить данные в вашу базу данных MySQL. Метод PHP MySQLi и PHP Data Object, или PDO.

Метод с MySQLi

Прежде всего, нужно установить соединение с базой данных. После этого мы можем продолжить с SQL запросом на добавление записи в таблицу MySQL — INSERT. Ниже показан полный пример PHP кода с методами подключения и вставки:

" . mysqli_error($conn);
}
mysqli_close($conn);

?>

Первая часть кода (строки 3 – 18) касается подключения к базе данных. Мы не станем углубляться, так как у нас есть отдельное подробное руководство по этой теме. Если вы хотите знать, что означает каждая строка, читайте, как подключиться к базе данных.

Начнём со строки 19:

$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Test', 'Testing', 'Testing@tesing.com')";

Это наиболее важная строка PHP кода, поскольку именно она отвечает за добавление записи в таблицу MySQL. INSERT INTO — это выражение, которое добавляет запись в указанную таблицу базы данных MySQL. В нашем примере мы добавляем данные в таблицу Students.

Двигаясь дальше, в скобках, мы указываем имена столбцов таблицы, в которые хотим добавить значения: (name, lastname, email). Данные будут добавлены в определённом порядке. Если мы напишем (email, lastname, name), значения будут добавлены в неправильном порядке.

Следующая часть — выражение VALUES. Здесь мы задаём наши значения в ранее указанные поля. Таким образом, каждый столбец получит своё значение. Например, в нашем случае это будет что-то вроде: name = Test, lastname = Testing, email = Testing@testing.com.

Также стоит отметить, что мы только что выполнили SQL-запрос с использованием кода PHP. SQL-запросы должны быть заключены в кавычки. В нашем примере всё между кавычками и записанное после $sql = является SQL-запросом.

Следующая часть кода (20 – 22 строки) проверяет успешность нашего запроса:

if (mysqli_query($conn, $sql)) {
     echo "New record created successfully";
}

Мы увидим это сообщение, если запрос выполнен успешно.

И последняя часть ( строки 22 – 24) демонстрирует пример другого сообщения.

else {
     echo "Error: " . $sql . "
" . mysqli_error($conn); }

Вы увидите подобное сообщение в случае возникновения ошибки при попытке отправить запрос.

Метод с PHP Data Object (PDO)

Как и в предыдущем примере, нам нужно прежде всего выполнить подключение к базе данных, которое производится при создании нового объекта PDO. Как это сделать, показано в уже не раз упомянутом руководстве. Поскольку подключение к базе данных MySQL является объектом PDO, мы должны использовать различные PDO методы (любую функцию, которая является частью любого объекта) для подготовки и запуска запросов. Методы объектов вызываются слудеющим образом:

$the_Object->the_Method();

PDO позволяет вам подготовить SQL-код перед его выполнением. Перед запуском SQL-запрос оценивается и корректируется. Не секрет, что взломщики могут модифицировать запрос. SQL-инъекция может быть осуществлена просто путём ввода SQL-кода в поле формы. Например:

// Пользователь вписывает это в поле имени пользователя в форме для входа
john"; DROP DATABASE user_table;

// И вот, во что превращается окончательный запрос  
"SELECT * FROM user_table WHERE username = john"; DROP DATABASE user_table;

Поскольку SQL-код синтаксически правильный, точка с запятой делает из DROP DATABASE user_table новый SQL-запрос, а ваша таблица пользователей удаляется. Подготовляемые запросы, также известные как связываемые переменные не позволят завершить запрос, использовав символы  и ;. Как результат, вредоносная инструкция DROP DATABASE не будет выполнена.

Всегда используйте подготовляемые запросы, когда отправляете или получаете данные из базы данных с PDO

Чтобы использовать подготовляемые запросы, вы должны написать новую переменную, которая вызывает метод prepare() объекта базы данных.

В правильном виде код выглядит так:

 PDO::ERRMODE_EXCEPTION];

// Создаём новое соединение с базой данных MySQL с использованием PDO, $my_Db_Connection - это объект
try { 
  $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options);
  echo "Connected successfully";
} catch (PDOException $error) {
  echo 'Connection error: ' . $error->getMessage();
}

// Задаём переменные для человека, которого мы хотим добавить в базу данных
$first_Name = "Test";
$last_Name = "Testing";
$email = "Testing@testing.com";

// Здесь мы создаём переменную, которая вызывает метод prepare() объекта базы данных
// SQL-запрос, который вы хотите запустить, вводится как параметр, а плейсхолдеры записываются следующим образом - :placeholder_name
$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)");

// Теперь мы сообщаем скрипту, на какую переменную фактически ссылается каждый плейсхолдер, используя метод bindParam()
// Первый параметр - это плейсхолдер в приведённом выше выражении, второй параметр - это переменная, на которую он должен ссылаться
$my_Insert_Statement->bindParam(:first_name, $first_Name);
$my_Insert_Statement->bindParam(:last_name, $last_Name);
$my_Insert_Statement->bindParam(:email, $email);

// Выполните запрос, используя данные, которые мы только-что определили
// Метод execute() возвращает TRUE, если запрос был выполнен успешно и FALSE в противном случае, позволяя вам создавать собственные сообщения
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

// На этом этапе вы можете изменить данные переменных и выполнить запрос снова, чтобы добавить больше данных в БД.
$first_Name = "John";
$last_Name = "Smith";
$email = "john.smith@email.com";
$my_Insert_Statement->execute();

// Выполните снова с другими переменными 
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

В строках 28, 29 и 30 мы используем метод bindParam() объекта базы данных. Есть так же метод bindValue(), отличающийся от предыдущего.

  • bindParam() — связывает переменную PHP с параметром, достигнув execute(). Первый раз, когда скрипт доходит до метода execute() он видит, что $first_Name ссылается на “Test”, связывает это значение и выполняет запрос. Когда скрипт добирается до метода execute() второй раз, он смотрит, что $first_Name теперь ссылается на “John”, связывает это значение и запускает запрос опять с новым значением. Важно понимать, что мы создаём запрос один раз и повторно используем его, подставляя разные данные в разных местах скрипта.
  • bindValue() — этот метод связывает параметр с заданным значением. Поскольку заданное значение $first_Name — “Test”, при достижении метода bindValue(), оно будет использоваться каждый раз при вызове метода execute() для $my_Insert_Statement.

Обратите внимание, что мы повторно используем переменную $first_Name и задаём ей новое значение во второй раз. Если вы проверите свою базу данных после запуска этого скрипта, там будут оба заданных имени, даже если переменная $first_Name в конце скрипта равна “John”. Помните, что PHP оценивает содержимое всего скрипта перед его выполнением.

Если вы измените свой скрипт, заменив bindParam на bindValue, вы добавите в базу MySQL “Test Testing” дважды, а John Smith будет проигнорирован.

Проверка Статуса Выполнения и Устранение Распространённых Ошибок

Если запрос, который мы выполнили и вставили в базу данных MySQL, был успешным, мы увидим следующее сообщение:

Connect Successfully
New record created successfully

Устранение Распространённых Ошибок

Если же запись содержит ошибку, вы увидите соответствующее сообщение. Но не волнуйтесь, есть множество вариантов, как можно устранить эти ошибки mySQL.

MySQLi

Если вы столкнулись с ошибкой, работая с MySQLi, причина скорее всего в неправильном синтаксисе. Для примера давайте сделаем одну синтаксическую ошибку в нашем коде. В результате мы увидим что-то вроде этого:

Connect successfully
Error: INSERT INTO students {name, lastname, email} VALUES ('Test', 'Testing', 'Testing@testing.com')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Test', 'Testing', 'Test@testingcom')' at line 1"

Как мы видим, первая часть кода в порядке, подключение было успешно установлено, но с нашим SQL-запросом не всё так гладко.

"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"

Допущена синтаксическая ошибка, которая привела к невозможности выполнения нашего скрипта. Ошибка была допущена здесь:

$sql = "INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')";

Мы использовали фигурные скобки вместо простых. Поскольку это неправильно, наш скрипт выдал синтаксическую ошибку.

PDO

В строке 7 подключения PDO, режим обработки ошибок установлен в «display all exceptions» (отображать все исключения). Если вы уберёте это из скрипта и запрос потерпит неудачу, вы не получите никакого сообщения об ошибке. Со включёнными исключениями, будут отображаться конкретные возникшие проблемы.

Тем не менее этот режим лучше использовать при разработке скриптов, так как в случае попытки получить несанкционированный доступ к вашим данным он может выявить имена баз данных и таблиц. Если же причиной стала синтаксическая ошибка, как в примере с фигурными скобками, сообщение будет выглядеть примерно так:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"

Другие проблемы, с которым вы можете столкнуться:

  • Неверно указаны столбцы (несуществующие столбцы или ошибки в написании названий).
  • Несоответствие типа значения типу столбца. Например, когда мы хотим присвоить числовое значение 47 полю Name, мы получим ошибку, потому что предполагается, что значение будет строкой. Но, если вы укажете число в кавычках, например, “47”, ошибки не будет, потому что наше число будет записано как строка в этот столбец.
  • Попытка ввести данные в таблицу, которой не существует или ошибка в написании названия таблицы.

Все эти ошибки могут быть исправлены, следуя руководствам по исправлению ошибок или журнала ошибок (англ.).

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

Добавление Записи в Таблицу MySQL - Вид Таблицы в phpMyAdmin