Работаете c программами на PHP в Linux и у вас есть задача по интегрированию MySQL на сайт на PHP? Тогда это руководство для вас. 😉
Необходимые условия:
PHP и установленный веб-сервер (например, Apache).
Создание таблицы при загрузке сайта
Для начала у вас должен быть установлен PHP. Чтобы получить версию, запускаем:
php -v
Вот такой ответ должен прийти:
Теперь установим сервер MySQL. Для этого открываем терминал и запускаем:
sudo apt-get install mysql-server
Вводим пароль, чтобы начать установку, и нажимаем на Enter.
Проверяем, установлен ли MySQL, этой командой:
sudo mysql
Если установка прошла успешно, выводится примерно следующее:
Теперь для доступа к базе данных с использованием программы на PHP нужно передать в качестве аргументов в SQL-запросе имя пользователя и пароль. Поэтому создадим пользователя с паролем и предоставим ему права доступа к базе данных.
Нового пользователя и пароль создаем, выполняя следующую команду:
sudo mysql -u rootCREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
Теперь предоставим пользователю разрешения на доступ к базе данных, а заодно убедимся, что эти права доступа отображаются (для этого задействуем команду flush
):
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';FLUSH PRIVILEGES;
И для доступа к MySQL в Google Cloud:
GRANT ALL PRIVILEGES ON `%`.* TO 'newuser'@'localhost';
Для привязки ко всем адресам запускаем это:
#bind-address = 127.0.0.1
Для создания нового пользователя и пароля нужно выполнить указанные выше команды. После добавления нового пользователя выходим и перезапускаем сервер MySQL:
exit
service mysql restart
Обратите внимание: в случае с PHP версией 7+ для правильного выполнения команд MySQL необходимо использовать расширение MySQLi. Функции MySQLi позволяют получать доступ к серверам баз данных MySQL.
Для установки расширения MySQLi запускаем:
Sudo apt Install php-mysqli
Теперь все готово к выполнению программ на PHP с интегрированием MySQL. Переходим к решению сформулированной выше задачи.
Первым делом создадим базу данных на сервере MySQL. Для этого подключимся к серверу MySQL:
sudo mysql
Для того, чтобы создать таблицу, сначала нужно создать базу данных. Следующей командой создаем базу данных с названием «test»:
create database test;
Дальше эту базу данных нужно выбрать:
use test;
exit
Код для создания таблицы при загрузке сайта
База данных готова, теперь напишем код для создания таблицы при загрузке сайта.
Как было указано в необходимых условиях, в качестве хоста будет использоваться Apache2, поэтому выполняем такие команды:
cd /var/www/html
vim sqltest.php
С их помощью создается файл и открывается редактор Vim.
Копируем и вставляем в редактор следующий код:
<html>
<head>
<title> creating mysql tables </title>
</head>
<body>
<?php
$dbhost = 'localhost';
$dbuser= 'newuser';
$dbpass = 'password';
$conn = mysqli_connect($dbhost , $dbuser , $dbpass,"test");
if(!$conn){
die('Could not connect:'.mysqli_error($conn));
}
echo 'Connected successfully </br>';
$sql="CREATE TABLE student(".
"USN INT NOT NULL,".
"Name VARCHAR(100) NOT NULL,".
"Marks VARCHAR(40) NOT NULL);";
mysqli_select_db($conn,'test');
$retval=mysqli_query($conn,$sql);
if(! $retval){
die('Could not create table:'.mysqli_error($conn));
}
echo "Table created successfully\n";
mysqli_close($conn);
?>
</body>
</html>
В строках 7, 8 и 9 объявляются переменные, в которых сохраняются имя пользователя, пароль и localhost. Дальше они задействуются в строке 10 и передаются в качестве параметров в команду mysqli_connect
, которой инициируется соединение с сервером MySQL. Если соединение установить не удалось, для отображения ошибки используется оператор if
и mysqli_error()
. Затем пишется запрос на создание таблицы, который присваивается переменной sql
. И запускается запрос для выбора базы данных test
. После чего запускается mysqli_query
для создания таблицы посредством передачи в качестве параметров переменных sql
и connection
.
Теперь сохраняем файл и выходим из него, открываем браузер и заходим на этот сайт:
Если все работает правильно, получаем сообщение об успешном создании таблицы.
Если при открытии сайта сообщения не видно, переходим в каталог, в котором создан файл:
cd /var/www/html
И выполняем в терминале следующую команду:
php -S localhost:8000
Открываем браузер и заходим на такой сайт:
http://localhost:8000/sqltest.php.
Теперь сообщение об успешном создании таблицы будет видно.
Проверим, выполнив в терминале команду:
sudo mysql
Теперь запускаем:
use test;
desc student;
Примечания:
1) Имя пользователя MySQL — «newuser», а пароль — «password».
2) Поменяйте все команды с MySQL на MySQLi, если у вас версия PHP 7+ , например mysql_connect
станет mysqli_connect
, а mysql_error()
станет mysqli_error()
.
Появление возможных ошибок, и как с ними справиться:
- При выполнении команды создания проверяйте, те ли кавычки используете. Ведь
`
и‘
— это разные знаки. - Если при выполнении программы есть какая-либо ошибка в SQL-запросе, связанная с форматом, то при присваивании
$sql
$sql="CREATE TABLE student(".
"USN INT NOT NULL,".
"Name VARCHAR(100) NOT NULL,".
"Marks VARCHAR(40) NOT NULL);";
поставьте в конце запроса вместо точки точку с запятой.
3. Если возникли проблемы с командами MySQLi, выполните следующие команды:
php -v
Затем запишите свою версию PHP. Для этого в первой из следующих четырех команд замените x.x на свою версию PHP:
sudo apt-get install phpx.x-mysqli
sudo service apache2 restart
sudo phpenmod mysqli
sudo service apache2 restart
Так, если у вас версия PHP 7.4, то команда будет sudo apt-get install php7.4-mysqli.
4. Каждый раз, когда заходите на свой сайт на PHP, запускайте в каталоге, где находится программа на PHP, следующую команду:
php -S localhost:8000
И при получении какой-либо ошибки, например такой:
Запускайте эту команду:
fuser -k 8000/tcp
И после выполнения php -S localhost:8000 он заработает. Так как процесс, задействующий этот порт, будет уничтожен и его можно будет использовать.
Еще одна программа на PHP
И вот еще одна программа на PHP для добавления новых записей в таблицу, попробуйте.
Прежде чем выполнять программу, запускаем запрос в MySQL для создания таблицы:
create table book(Acc_no INTEGER(20),Title varchar(50),Author varchar(50),Publisher varchar(50),Edition INTEGER(3));
HTML-код
<html>
<head><title>Deatails</title></head>
<body>
<form action = "phpfile.php" method="post">
<h1>ENTER DETAILS</h1>
ACCNO<input type="text"name="Acc_no"> <br>
<br>
TITLE<input type="text"name="Title"> <br>
<br>
AUTHOR<input type="text"name="Author"> <br>
<br>
EDITION<input type="text"name="Edition"> <br>
<br>
PUBLICATION<input type="text"name="Publisher"> <br>
<br>
<input type="submit"value="SUBMIT">
<input type="reset"value="CLEAR">
</form>
</body>
</html>
PHP-код:
<?php
header('content-type:text/plain');
$db=mysqli_connect('localhost','newuser','password','test');
if(!$db){
die('Could not connect:');
}
$sql="insert into book (Acc_no,Title,Author,Publisher,Edition)".
"values('$_REQUEST[Acc_no]',".
"'$_REQUEST[Title]','$_REQUEST[Author]',".
"'$_REQUEST[Publisher]','$_REQUEST[Edition]');";
mysqli_select_db($db,'test');
$retval=mysqli_query($db,$sql);
if(! $retval){
die('Could not insert values');
}
echo "Record Insertion Successful";
?>
Читайте также:
- Ключевое слово static в PHP
- Хочешь стать веб-разработчиком? Учи Node.js, а не PHP
- Java убьет ваш стартап. PHP спасёт его
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Balachandra DS: How to connect Mysql database to php website