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

Содержание

  • mysql_affected_rows — Возвращает число затронутых прошлой операцией рядов
  • mysql_client_encoding — Возвращает кодировку соединения
  • mysql_close — Закрывает соединение с сервером MySQL
  • mysql_connect — Открывает соединение с сервером MySQL
  • mysql_create_db — Создает базу данных MySQL
  • mysql_data_seek — Перемещает внутренний указатель в результате запроса
  • mysql_db_name — Возвращает название базы данных из вызова к mysql_list_dbs
  • mysql_db_query — Переключается на указанную базу данных и посылает запрос
  • mysql_drop_db — Уничтожает базу данных MySQL
  • mysql_errno — Возвращает численный код ошибки выполнения последней операции с MySQL
  • mysql_error — Возвращает текст ошибки последней операции с MySQL
  • mysql_escape_string — Экранирует строку для использования в mysql_query
  • mysql_fetch_array — Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба
  • mysql_fetch_assoc — Возвращает ряд результата запроса в качестве ассоциативного массива
  • mysql_fetch_field — Возвращает информацию о колонке из результата запроса в виде объекта
  • mysql_fetch_lengths — Возвращает длину каждого поля в результате
  • mysql_fetch_object — Обрабатывает ряд результата запроса и возвращает объект
  • mysql_fetch_row — Обрабатывает ряд результата запроса и возвращает массив с числовыми индексами
  • mysql_field_flags — Возвращает флаги, связанные с указанным полем результата запроса
  • mysql_field_len — Возвращает длину указанного поля
  • mysql_field_name — Возвращает название указанной колонки результата запроса
  • mysql_field_seek — Устанавливает внутренний указатель результата на переданное смещение поля
  • mysql_field_table — Возвращает название таблицы, которой принадлежит указанное поле
  • mysql_field_type — Возвращает тип указанного поля из результата запроса
  • mysql_free_result — Освобождает память от результата запроса
  • mysql_get_client_info — Возвращает данные о MySQL-клиенте
  • mysql_get_host_info — Возвращает информацию о соединении с MySQL
  • mysql_get_proto_info — Возвращает информацию о протоколе MySQL
  • mysql_get_server_info — Возвращает информацию о сервере MySQL
  • mysql_info — Возвращает информацию о последнем запросе
  • mysql_insert_id — Возвращает идентификатор, сгенерированный при последнем INSERT-запросе
  • mysql_list_dbs — Возвращает список баз данных, доступных на сервере
  • mysql_list_fields — Возвращает список колонок таблицы
  • mysql_list_processes — Возвращает список процессов MySQL
  • mysql_list_tables — Возвращает список таблиц базы данных MySQL
  • mysql_num_fields — Возвращает количество полей результата запроса
  • mysql_num_rows — Возвращает количество рядов результата запроса
  • mysql_pconnect — Устанавливает постоянное соединение с сервером MySQL
  • mysql_ping — Проверяет соединение с сервером и пересоединяется при необходимости
  • mysql_query — Посылает запрос MySQL
  • mysql_real_escape_string — Экранирует специальные символы в строках для использования в выражениях SQL
  • mysql_result — Возвращает данные результата запроса
  • mysql_select_db — Выбирает базу данных MySQL
  • mysql_set_charset — Устанавливает кодировку клиента
  • mysql_stat — Возвращает текущий статус сервера
  • mysql_tablename — Возвращает имя таблицы, содержащей указанное поле
  • mysql_thread_id — Возвращает идентификатор текущего потока
  • mysql_unbuffered_query — Посылает запрос MySQL без авто-обработки результата и его буферизации

Запуск сервера MySQL

Перед попыткой подключения к серверу базы данных MySQL необходимо убедиться в том, что он запущен на компьютере. Если сервер базы данных не подключен, вы увидите (disconnected) рядом с именем пользователя в узле MySQL Server в окна ‘Служба’ и не сможете развернуть узел.


Для подключения к серверу баз данных убедитесь, что сервер базы данных MySQL запущен на компьютере, щелкните правой кнопкой мыши ‘Базы данных’ > узел ‘MySQL Server’ в окне ‘Службы’ и выберите ‘Подключить’. Может отобразиться запрос на ввод пароля для подключения к серверу.

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

Работа с данными в таблице

Для работы с табличными данными можно использовать редактор SQL в IDE NetBeans. Выполняя запросы SQL в базе данных, можно добавлять, изменять и удалять данные в структурах баз данных. Для добавления новой записи (строки) в таблицу Counselor необходимо выполнить действия, описываемые ниже.

Выберите элемент «Выполнение команды» в папке «Таблицы» проводника баз данных. В главном окне редактора SQL отобразится пустой холст. В редакторе SQL введите следующий запрос. INSERT INTO Counselor VALUES (1, ‘Ricky’, ‘»The Dragon»‘, ‘Steamboat’,’334 612-5678′, ‘r_steamboat@ifpwafcad.com’, ‘1996-01-01’)

Чтобы выполнить запрос щелкните правой кнопкой мыши в редакторе SQL Editor и выберите ‘Выполнить оператор’. В окне «Вывод» будет выведено сообщение об успешном выполнении запроса.

Чтобы убедиться, что новая запись добавлена к таблице Counselor в проводнике баз данных щелкните правой кнопкой мыши узел таблицы Counselor и выберите ‘Просмотреть данные’. В главном окне редактора SQL откроется новая панель. При выборе команды «Просмотреть данные» в верхней части окна редактора SQL автоматически создается запрос на выбор всех данных таблицы. Результаты выполнения оператора отображаются в представлении таблицы в нижней части окна. В рассматриваемом примере будет отображена таблица Counselor

Обратите внимание, что новая строка была добавлена с данными, предоставленными в запросе SQL.

Создание БД и таблиц

Создать БД можно из панели управления хостингом, если есть такая возможность, а если нет, то из phpMyAdmin. Сравнение ставим utf8_general_ci.

Заходим в БД и создадим таблицу users, которую будем использовать для примера. Она будет включать колонки: ID(int), login(varchar) и pass(varchar). ID будет первичным ключом, а также будет иметь галочку напротив AI(auto increment), что позволит каждой новой записи присваивать id на 1 больше, чем у прошлой записи. Кроме этого, не забываем проставить длину varchar’ам и поставить сравнение utf8_general_ci к полям login и pass.

Получаем:

Теперь мы имеем готовую БД и таблицу для работы с ней.

Table of Contents

  • mysql_affected_rows — Get number of affected rows in previous MySQL operation
  • mysql_client_encoding — Returns the name of the character set
  • mysql_close — Close MySQL connection
  • mysql_connect — Open a connection to a MySQL Server
  • mysql_create_db — Create a MySQL database
  • mysql_data_seek — Move internal result pointer
  • mysql_db_name — Retrieves database name from the call to mysql_list_dbs
  • mysql_db_query — Selects a database and executes a query on it
  • mysql_drop_db — Drop (delete) a MySQL database
  • mysql_errno — Returns the numerical value of the error message from previous MySQL operation
  • mysql_error — Returns the text of the error message from previous MySQL operation
  • mysql_escape_string — Escapes a string for use in a mysql_query
  • mysql_fetch_array — Fetch a result row as an associative array, a numeric array, or both
  • mysql_fetch_assoc — Fetch a result row as an associative array
  • mysql_fetch_field — Get column information from a result and return as an object
  • mysql_fetch_lengths — Get the length of each output in a result
  • mysql_fetch_object — Fetch a result row as an object
  • mysql_fetch_row — Get a result row as an enumerated array
  • mysql_field_flags — Get the flags associated with the specified field in a result
  • mysql_field_len — Returns the length of the specified field
  • mysql_field_name — Get the name of the specified field in a result
  • mysql_field_seek — Set result pointer to a specified field offset
  • mysql_field_table — Get name of the table the specified field is in
  • mysql_field_type — Get the type of the specified field in a result
  • mysql_free_result — Free result memory
  • mysql_get_client_info — Get MySQL client info
  • mysql_get_host_info — Get MySQL host info
  • mysql_get_proto_info — Get MySQL protocol info
  • mysql_get_server_info — Get MySQL server info
  • mysql_info — Get information about the most recent query
  • mysql_insert_id — Get the ID generated in the last query
  • mysql_list_dbs — List databases available on a MySQL server
  • mysql_list_fields — List MySQL table fields
  • mysql_list_processes — List MySQL processes
  • mysql_list_tables — List tables in a MySQL database
  • mysql_num_fields — Get number of fields in result
  • mysql_num_rows — Get number of rows in result
  • mysql_pconnect — Open a persistent connection to a MySQL server
  • mysql_ping — Ping a server connection or reconnect if there is no connection
  • mysql_query — Send a MySQL query
  • mysql_real_escape_string — Escapes special characters in a string for use in an SQL statement
  • mysql_result — Get result data
  • mysql_select_db — Select a MySQL database
  • mysql_set_charset — Sets the client character set
  • mysql_stat — Get current system status
  • mysql_tablename — Get table name of field
  • mysql_thread_id — Return the current thread ID
  • mysql_unbuffered_query — Send an SQL query to MySQL without fetching and buffering the result rows

Подключение в PHP к MySQL и выполнение запросов

Последнее обновление: 1.11.2015

Для подключения к MySQL из PHP нам надо указать настройки подключения: адрес сервера, логин, пароль, название базы данных и т.д. Так как обычно подключения к бд используются множеством скриптов, то нередко настройки подключения выносятся в отдельный файл, благодаря чему легче их оперативно изменять.

Итак, создадим файл connection.php и добавим в его следующие строки:

<?php
$host = 'localhost'; // адрес сервера 
$database = 'compstore'; // имя базы данных
$user = 'root'; // имя пользователя
$password = '1234567'; // пароль
?>

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

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

Теперь мы можем подключиться к базе данных:

<?php
require_once 'connection.php'; // подключаем скрипт

// подключаемся к серверу
$link = mysqli_connect($host, $user, $password, $database) 
	or die("Ошибка " . mysqli_error($link));

// выполняем операции с базой данных
	
// закрываем подключение
mysqli_close($link);
?>

Первым делом подключаем скрипт с настройками с помощью инструкции .

Для открытия подключения применяем функцию mysqli_connect(). Он принимает все конфигурационные настройки и подключается к серверу. В случае ошибки подключения срабатывает оператор , который выводит сообщение об ошибке и завершает работу скрипта. А в случае успешного подключения функция возвращает объект подключения в виде переменной .

После окончания работы подключение нужно закрыть. Для этого применяется функция mysqli_close(), которая в качестве параметра принимает объект подключения.

Чтобы осуществить запрос к базе данных, нам надо использовать функцию mysqli_query(), которая принимает два параметра: объект подключения и строку запроса на языке SQL. Например:

<?php
require_once 'connection.php'; // подключаем скрипт

// подключаемся к серверу
$link = mysqli_connect($host, $user, $password, $database) 
	or die("Ошибка " . mysqli_error($link));

// выполняем операции с базой данных
$query ="SELECT * FROM phones";
$result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); 
if($result)
{
	echo "Выполнение запроса прошло успешно";
}

// закрываем подключение
mysqli_close($link);
?>

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

НазадВперед

PHP модули для подключения к серверу MySQL (PDO и MySQLi)

PHP может работать с сервером MySQL используя модули:

  • MySQLi («i» — improved)
  • PDO (PHP Data Objects)

Ранее в PHP применялась функция , которая в PHP версии 5.5.0 была признана устаревшей и полностью упразднена в PHP версии 7.0.0.

Что использовать MySQLi или PDO? Это зависит от ваших предпочтений.

MySQLi и PDO обеспечивают современное, а главное безопасное соединение с базами данных и имеют защиту от SQL инъекций.

PDO поддерживает не только MySQL, а также еще несколько типов СУБД (CUBRID, MS SQL Server, Firebird, Informix,  ODBC, DB2, 4D, SQLite, PostgreSQL, Oracle). Причем если понадобится вы можете поменять тип СУБД в любой момент и вам не придется переписывать все запросы в приложении т.к. они продолжат спокойно работать с новой СУБД. PDO использует только объектно-ориентированный подход к работе с БД.


MySQLi работает только с MySQL и при смене СУБД придется переписывать весь код приложения и запросы. MySQLi использует как объектно-ориентированный подход, так и процедурный, что расширяет ее API.

Я же лично отдаю предпочтение PDO т.к. его основным отличием является, возможность ловить исключения. Так при ошибке в работе с БД будет создано исключение, в результате чего дальнейший код не будет выполнятся. Также знание PDO может пригодится при работе с другими СУБД.

Безопасное подключение через SSH-туннель

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

Настройка SSH-туннеля

Установите на ваш компьютер программу putty. Это бесплатное программное обеспечение, скачать ее можно на официальном сайте.

Запустите программу.

В категории настроек «Session» в поле «Имя хоста» (Host Name) укажите домен вашего сайта.

Перейдите в категорию настроек Connection → SSH → Tunnels и в поле «Source port» укажите значение 3306, в поле «Destination» — localhost:3306.

После этого нажмите кнопку «Add».

После этого нажмите кнопку «Open». Установится соединение с вашим хостом.

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

Туннель установлен. Для соединения с базой данных используйте имя пользователя и пароль, заданные вами при создании базы данных в разделе Панели управления «Базы данных». В качестве адреса сервера используйте 127.0.0.1, порт для подключения 3306.

Пример подключения с помощью программы mysql (пароль будет запрошен при подключении):

Внимание: если на вашем компьютере уже работает сервер баз данных MySQL, подключение удаленному серверу по порту 3306 будет невозможно. В этом случае при создании подключения в putty укажите другой порт в качестве «Source port», например, 3307

Используйте этот порт при подключении к базе данных.

В командной строке выполните следующую команду:

  • 3306 (сразу после ключа -L) — порт на локальном компьютере, к которому вы сможете подключаться клиентом mysql;
  • yourlogin — имя вашего аккаунта (логин в Панели управления);
  • yourdomain.ru — имя вашего сайта.

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

Туннель установлен. Для соединения с базой данных используйте имя пользователя и пароль, заданные вами при создании базы данных в разделе Панели управления «Базы данных». В качестве адреса сервера используйте 127.0.0.1, порт для подключения 3306.

Пример подключения с помощью программы mysql (пароль будет запрошен при подключении):

Внимание: если на вашем компьютере уже работает сервер баз данных MySQL, подключение удаленному серверу по порту 3306 будет невозможно. В этом случае при запуске ssh сразу после ключа -L укажите альтернативный порт, например, 3307

Используйте этот порт при подключении к базе данных.


Проверить соединение с БД можно посредством утилиты telnet. Войдите в интерфейс командной строки (в ОС MS Windows: Пуск → Выполнить → cmd.exe), наберите команду:

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

Создание экземпляра базы данных и подключение к ней

Редактор SQL является широко распространенным способом взаимодействия с базами данных. Для этого в IDE NetBeans имеется встроенный редактор SQL. Обычно редактор SQL доступен с помощью параметра ‘Выполнить команду’ из контекстного меню узла подключения (или дочерних узлов узла подключения). После установления подключения к серверу MySQL, можно создать новый экземпляр базы данных в редакторе SQL. Для продолжения работы с данным учебным курсом создайте экземпляр с именем MyNewDatabase:

  1. В окне ‘Службы’ среды IDE щелкните правой кнопкой мыши узел сервера MySQL Server и выберите ‘Создать базу данных’.

    Откроется диалоговое окно «Создание базы данных MySQL».
  2. В диалоговом окне «Создание базы данных MySQL» введите имя новой базы данных. В этом учебном курсе используется имя . Не устанавливайте флажок.

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

  3. Нажмите кнопку «ОК».

    В узле «Сервер MySQL» окна «Службы» будет выведена новая база данных.

  4. Щелкните узел новой базы данных правой кнопкой мыши и выберите ‘Подключение’, чтобы установить соединение с базой данных.

    Открытые подключения к базе данных отображаются в узле ‘Установленные подключения’ () в окне ‘Службы’.

Как подключиться к MySQL серверу с помощью PHP?

Для возможности обмена данными между PHP и MySQL необходимо установить соединение.

Подключение через MySQLi (объектно-ориентированный подход)

<?php $server = «localhost»; $user = «root»; $password = «MySafePass4!»;

// Открываем соединение $mysqli_connection = new mysqli($server, $user, $password);

// Проверка результата подключения if ($mysqli_connection->connect_error) { die(«Подключение не удалось: » . $mysqli_connection->connect_error); } echo «Подключение прошло успешно!»;

// Закрываем соединение $mysqli_connection->close(); ?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

<?php

$server=»localhost»;

$user=»root»;

$password=»MySafePass4!»;

  // Открываем соединение

$mysqli_connection=newmysqli($server,$user,$password);

  // Проверка результата подключения

if($mysqli_connection->connect_error){

die(«Подключение не удалось: «.$mysqli_connection->connect_error);

}

echo»Подключение прошло успешно!»;

  // Закрываем соединение

$mysqli_connection->close();

?>

Подключение через MySQLi (процедурный подход)

<?php $server = «localhost»; $user = «root»; $password = «MySafePass4!»;

// Открываем соединение $mysqli_connection = mysqli_connect($server, $user, $password);

// Проверка результата подключения if (!$mysqli_connection) { die(«Подключение не удалось: » . mysqli_connect_error()); } echo «Подключение прошло успешно!»;

// Закрываем соединение mysqli_close($mysqli_connection); ?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

<?php

$server=»localhost»;

$user=»root»;

$password=»MySafePass4!»;

  // Открываем соединение

$mysqli_connection=mysqli_connect($server,$user,$password);

  // Проверка результата подключения

if(!$mysqli_connection){

die(«Подключение не удалось: «.mysqli_connect_error());

}


echo»Подключение прошло успешно!»;

  // Закрываем соединение

mysqli_close($mysqli_connection);

?>

Подключение через PDO

<?php $server = «localhost»; $user = «root»; $password = «MySafePass4!»;

try { $pdo_connection = new PDO(«mysql:host=$server;dbname=test», $user, $password); // Определяем ошибки как исключения $pdo_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo «Подключение прошло успешно!»; }

// Отлавливаем исключение catch(PDOException $e) { echo «Подключение не удалось: » . $e->getMessage(); } // Закрываем соединение $pdo_connection = null; ?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

<?php

$server=»localhost»;

$user=»root»;

$password=»MySafePass4!»;

try{

$pdo_connection=newPDO(«mysql:host=$server;dbname=test»,$user,$password);

// Определяем ошибки как исключения

$pdo_connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

echo»Подключение прошло успешно!»;

}   // Отлавливаем исключение

catch(PDOException$e){

echo»Подключение не удалось: «.$e->getMessage();

} // Закрываем соединение

$pdo_connection=null;

?>

Подключение к базе данных

Последнее обновление: 08.08.2018

Вначале создадим на сервере MySQL пустую базу данных, которую назовем store и с которой мы будет работать в приложении на Java. Для создания базы данных применяется выражение SQL:

CREATE DATABASE store;

Его можно выполнить либо из консольного клиента MySQL Command Line Client, либо из графического клиента MySQL Workbench, которые устанавливются вместе с сервером MySQL. Подробнее про создание базы данных можно прочитать в статье Создание и удаление базы данных.

Для подключения к базе данных необходимо создать объект java.sql.Connection. Для его создаия применяется метод:

Connection DriverManager.getConnection(url, username, password)

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

Пример создания подключения к созданной выше локальной базе данных store:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/store", "root", "password");

После завершения работы с подключением его следует закрыть с помощью метода close():

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/store", "root", "password");
// работа с базой данных
connection.close();

Либо мы можем использовать конструкцию try:

try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/store", "root", "password")){
	// работа с базой данных
}

Возможные проблемы с часовыми поясами и SSL

При подключении к базе данных MySQL мы можем столкнуться с рядом проблем. Например, определим следующий код подключения:

import java.sql.Connection;
import java.sql.DriverManager;

public class Program{
      
    public static void main(String[] args) {
         try{
			 String url = "jdbc:mysql://localhost/store";
			 String username = "root";
			 String password = "password";
			 Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance();
			 try (Connection conn = DriverManager.getConnection(url, username, password)){
				 
				System.out.println("Connection to Store DB succesfull!");
			 }
		 }
		 catch(Exception ex){
			 System.out.println("Connection failed...");
			 
			 System.out.println(ex);
		 }
    }
}

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

Из консольного вывода видно, что проблема заключается с SSL и часовым поясом. Чтобы решить данную проблему, необходимо указать в адресе подключения часовой пояс бд и параметры для использования ssl. В частности, я указываю, что SSL не будет использоваться и что часовым поясом будет московский часовой пояс:

String url = "jdbc:mysql://localhost/store?serverTimezone=Europe/Moscow&useSSL=false";

Файлы конфигурации

Мы можем определить все данные для подключения непосредственно в программе. Однако что если какие-то данные были изменены? В этом случае потребуется перекомпиляция приложения. Иногда это не всегда удобно, например, отсутствует досуп к исходникам, или перекомпиляция займет довольно продолжительное время. В этом случае мы можем хранить настройки в файле.

Так, создадим в папке программы новый текстовый файл database.properties, в котором определим настройки подключения:

url = jdbc:mysql://localhost/store?serverTimezone=Europe/Moscow&useSSL=false
username = root
password = password

Загрузим эти настройки в программе:

import java.sql.*;
import java.nio.file.*;
import java.io.*;
import java.util.*;

public class Program{
      
    public static void main(String[] args) {
         try{
			 Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance();
			 try (Connection conn = getConnection()){
				 
				System.out.println("Connection to Store DB succesfull!");
			 }
		 }
		 catch(Exception ex){
			 System.out.println("Connection failed...");
			 
			 System.out.println(ex);
		 }
    }
	
	public static Connection getConnection() throws SQLException, IOException{
		
		Properties props = new Properties();
		try(InputStream in = Files.newInputStream(Paths.get("database.properties"))){
			props.load(in);
		}
		String url = props.getProperty("url");
		String username = props.getProperty("username");
		String password = props.getProperty("password");
		
		return DriverManager.getConnection(url, username, password);
	}
}

НазадВперед


С этим читают