Difference between revisions of "RU/dbConnect"

From Multi Theft Auto: Wiki
(Пример)
 
(3 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
{{Translate|RU}}
+
{{Translate}}
 
{{RU/Server function}}
 
{{RU/Server function}}
 
Эта функция открывает подключение к базе данных и возвращает элемент, который может быть использован с [[RU/dbQuery|dbQuery]]. Для отключения используйте [[RU/destroyElement|destroyElement]].
 
Эта функция открывает подключение к базе данных и возвращает элемент, который может быть использован с [[RU/dbQuery|dbQuery]]. Для отключения используйте [[RU/destroyElement|destroyElement]].
{{RU/Note|Connecting and disconnecting many times can have a performance impact on the server. For optimal performance it is recommended that you use dbConnect only once when the resource starts, and share the connection element with the whole script.}}
+
{{RU/Note|Подсоединение и отсоединение много раз может негативно повлиять на производительность сервера. Для оптимальной производительности рекомендуется использовать dbConnect только один раз, когда ресурс запускается, и использовать это соединение во всем ресурсе.}}
 
{{RU/Note|dbConnect на Linux MySQL требует libmysqlclient.so.15 (для MTA 1.3), или libmysqlclient.so.16 (для MTA 1.4)}}
 
{{RU/Note|dbConnect на Linux MySQL требует libmysqlclient.so.15 (для MTA 1.3), или libmysqlclient.so.16 (для MTA 1.4)}}
 
==Синтаксис==  
 
==Синтаксис==  
Line 12: Line 12:
 
===Обязательные параметры===
 
===Обязательные параметры===
 
*'''databaseType:''' Тип базы данных. Может быть ''sqlite'' или ''mysql''
 
*'''databaseType:''' Тип базы данных. Может быть ''sqlite'' или ''mysql''
*'''host:''' The target to connect to. The format of this depends on the database type.
+
*'''host:''' Цель для подключения. Формат зависит от типа базы данных.
** Для SQLite it is a [[filepath]] to a SQLite database file. If the filepath starts with ":/" then the server's global databases directory is used. The file will be created if it does not exist.
+
** Для SQLite это [[filepath|путь]] к файлу SQLite базы данных. Если путь начинается с ":/" будет использоваться глобальный каталог баз данных сервера. Файл будет создан, если он не существует.
** Для MySQL it is a list of key=value pairs separated by semicolons. Supported keys are:
+
** Для MySQL это список формата ключ=значение, разделенный точкой с запятой. Поддерживаются следующие ключи:
*** '''dbname''': Name of the database to use e.g. ''dbname=test''
+
*** '''dbname''': Имя базы данных для использования. Например: ''dbname=test''
*** '''host''': Host address e.g. ''host=127.0.0.1''
+
*** '''host''': Адрес хоста. Например: ''host=127.0.0.1''
*** '''port''': Host port e.g. ''port=1234'' (optional, defaults to standard MySQL port if not used)
+
*** '''port''': Порт хоста. Например: ''port=1234'' (опционально, по умолчанию используется стандартный порт MySQL)
*** '''unix_socket''': Unix socket or named pipe to use (optional, thankgoodness)
+
*** '''unix_socket''': Unix-сокет или именованный канал для использования (опционально)
  
 
===Необязательные параметры===
 
===Необязательные параметры===
 
*'''username:''' Обычно требуется для MySQL, игнорируется для SQLite  
 
*'''username:''' Обычно требуется для MySQL, игнорируется для SQLite  
 
*'''password:''' Обычно требуется для MySQL, игнорируется для SQLite  
 
*'''password:''' Обычно требуется для MySQL, игнорируется для SQLite  
*'''options :''' List of key=value pairs separated by semicolons. Supported keys are:
+
*'''options :''' Список ключей = Пары значений, которые разделены точкой с запятой. Поддерживаемые ключи:
**'''share''' which can be set to 0 or 1. (Default value for SQLite is "share=1", for MySQL is "share=0"). When set to 1, the connection is shared and will be used by other calls to dbConnect with the same host string. This is usually a good thing for SQLite connections, but not so good for MySQL unless care is taken.
+
**'''share''' может быть установлен на 0 или 1. (Значение по умолчанию для SQLite это "share=1", а для MySQL это "share=0"). Когда установлено значение 1, подключение становится общим и  это будет использоваться другими вызовами dbConnect с той же строкой хоста. Это обычно хорошо для SQLite подключений, но не очень хорошо для MySQL если не соблюдать осторожность.
**'''batch''' which can be set to 0 or 1. (Default is "batch=1"). When set to 1, queries called in the same frame are automatically batched together which can significantly speed up inserts/updates. The downside is you lose control of the feature that is used to achieve batching (For SQLite it is transactions, for MySQL it is autocommit mode). Therefore, if you use transactions, lock tables or control autocommit yourself, you may want to disable this feature.
+
**'''batch''' может быть установлен на 0 ил 1. (По умолчанию "batch=1"). Когда установлено на 1, запросы, вызываемые в одном кадре, автоматически объединяются, что может значительно ускорить вставку / обновление. Недостатком является то, что вы теряете контроль над функцией, которая используется для достижения пакетной обработки (для SQLite это транзакции, для MySQL это режим autocommit). Следовательно, если вы используете транзакции, блокируете таблицы или управляйте режимом autocommit самостоятельно, вы можете отключить эту функцию.
**'''autoreconnect''' which can be set to 0 or 1. (Default value "autoreconnect=1"). When set to 1, dropped connections will automatically be reconnected. Note that session variables, user variables, table locks and temporary tables will be reset because of the reconnection. So if you use these fancy features, you will need to turn autoreconnect off and cope with dropped connections some other way.
+
**'''autoreconnect''' может быть установлен на 0 или 1. (По умолчанию "autoreconnect=1"). Когда установлено на 1, разорванные подключения будут автоматически переподключены. Обратите внимание, что переменные сеанса (вкл. SET NAMES), пользовательские переменные, закрытые и временные таблицы будут сброшены из-за переподключения. Так что, если вы используете необычные функции, вам нужно будет отключить автоподключение и справиться с разорванными соединениями другим способом.
**'''log''' which can be set to 0 or 1. (Default value "log<nowiki>=</nowiki>1"). When set to 0, activity from this connection will not be recorded in the [[Server_Commands#debugdb|database debug log file]].
+
**'''log''' может быть установлен на 0 или 1. (Значение по умолчанию "log=1"). Когда установлено на 0, активность с данного подключения не будет записана в  [[Server_Commands#debugdb|файл журнала отладки базы данных.]].
**'''tag''' (Default value "tag<nowiki>=</nowiki>script"). A string which helps identify activity from this connection in the [[Server_Commands#debugdb|database debug log file]].
+
**'''tag''' (Значение по умолчанию "tag<nowiki>=</nowiki>script"). Строка, которая помогает идентифицировать активность этого соединения в [[Server_Commands#debugdb|файле журнала отладки базы данных]].
**'''suppress''' A comma separated list of error codes to ignore. (eg. "suppress<nowiki>=</nowiki>1062,1169").
+
**'''suppress''' разделенный запятыми список кодов ошибок, которые следует игнорировать. (например "suppress<nowiki>=</nowiki>1062,1169").
**'''charset''' If you want to communicate with the server using a character set different from the default, you'll need to indicate which one. (eg. "charset<nowiki>=</nowiki>utf8"). (used only in MySQL)
+
**'''charset''' если вы хотите общаться с сервером, используя набор символов, отличный от набора по умолчанию, вам необходимо указать, какой из них. (например "charset<nowiki>=</nowiki>utf8"). (используется только в MySQL)
  
 
===Возвращает===
 
===Возвращает===
Line 36: Line 36:
  
 
==Пример==
 
==Пример==
This example opens a connection to a SQLite database file in the current resource
+
В этом примере открывается соединение с файлом базы данных SQLite в текущем ресурсе.
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
 
test_db = dbConnect( "sqlite", "file.db" )
 
test_db = dbConnect( "sqlite", "file.db" )
 
</syntaxhighlight>
 
</syntaxhighlight>
  
This example opens a connection to a SQLite database file in another resource
+
В этом примере открывается соединение с файлом базы данных SQLite в другом ресурсе.
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
 
test_db = dbConnect( "sqlite", ":resname/file.db" )
 
test_db = dbConnect( "sqlite", ":resname/file.db" )
 
</syntaxhighlight>
 
</syntaxhighlight>
  
This example opens a connection to a SQLite database file in the global databases directory
+
В этом примере открывается соединение с файлом базы данных SQLite в каталоге глобальных баз данных.
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
 
test_db = dbConnect( "sqlite", ":/file.db" )
 
test_db = dbConnect( "sqlite", ":/file.db" )
 
</syntaxhighlight>
 
</syntaxhighlight>
  
This example opens a connection to a SQLite database file in a sub directory of the global databases directory
+
В этом примере открывается соединение с файлом базы данных SQLite в подкаталоге каталога глобальных баз данных.
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
 
test_db = dbConnect( "sqlite", ":/example/sub/dir/file.db" )
 
test_db = dbConnect( "sqlite", ":/example/sub/dir/file.db" )
 
</syntaxhighlight>
 
</syntaxhighlight>
  
This example opens a connection to a MySQL database called 'frank' at server ip 1.2.3.4 and allows the connection to be shared. Note that changing the database or other connection dependent settings affect all connections that are shared.
+
В этом примере открывается соединение с базой данных MySQL с именем «frank» на сервере с ip 1.2.3.4 используя набор символов utf8 и с разрешением совместного использования соединения. Обратите внимание, что изменение базы данных или других зависимых от подключения настроек влияет на все общие подключения.
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
 
test_db = dbConnect( "mysql", "dbname=frank;host=1.2.3.4", "username", "password", "share=1" )
 
test_db = dbConnect( "mysql", "dbname=frank;host=1.2.3.4", "username", "password", "share=1" )
 
</syntaxhighlight>
 
</syntaxhighlight>
  
This example opens a connection to a SQLite database is disallows sharing of the connection
+
В этом примере открывается соединение с базой данных SQLite, запрещается совместное использование соединения.
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
 
test_db = dbConnect( "sqlite", "file.db", "", "", "share=0" )
 
test_db = dbConnect( "sqlite", "file.db", "", "", "share=0" )
 +
</syntaxhighlight>
 +
 +
В этом примере выводится сообщение об отладке, установлено ли соединение с базой данных SQLite или нет
 +
<syntaxhighlight lang="lua">
 +
test_db = dbConnect( "sqlite", "file.db" )
 +
 +
if test_db then
 +
    outputDebugString( "Связь с базой данных была успешно установлена." )
 +
else
 +
    outputDebugString( "Не удалось установить соединение с базой данных." )
 +
end
 +
</syntaxhighlight>
 +
 +
В следующем примере показано, как можно найти общий ресурс для операций с базой данных с экспортированными функциями (запросить и выполнить):
 +
<syntaxhighlight lang="lua">
 +
function connect()
 +
    DBConnection = dbConnect( "mysql", "dbname=DBNAME;host=HOST;charset=utf8", "USERNAME", "PASSWORD" )
 +
    if (not DBConnection) then
 +
        outputDebugString("Ошибка: не удалось установить соединение с сервером базы данных MySQL")
 +
    else
 +
        outputDebugString("Успешно: Соединено с сервером базы данных MySQL")
 +
    end
 +
end
 +
 +
addEventHandler("onResourceStart",resourceRoot, connect)
 +
 +
function query(...)
 +
    local queryHandle = dbQuery(DBConnection, ...)
 +
    if (not queryHandle) then
 +
        return nil
 +
    end
 +
    local rows = dbPoll(queryHandle, -1)
 +
    return rows
 +
end
 +
 +
function execute(...)
 +
    local queryHandle = dbQuery(DBConnection, ...)
 +
    local result, numRows = dbPoll(queryHandle, -1)
 +
    return numRows
 +
end
 +
 +
function getDBConnection()
 +
    return DBConnection
 +
end
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Latest revision as of 19:15, 18 February 2020

Warning.png

This page requires local translation. If page will remain not translated in reasonable period of time it would be deleted.
Please clarify what language it should be translated to.

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

[[{{{image}}}|link=]] Примечание: Подсоединение и отсоединение много раз может негативно повлиять на производительность сервера. Для оптимальной производительности рекомендуется использовать dbConnect только один раз, когда ресурс запускается, и использовать это соединение во всем ресурсе.
[[{{{image}}}|link=]] Примечание: dbConnect на Linux MySQL требует libmysqlclient.so.15 (для MTA 1.3), или libmysqlclient.so.16 (для MTA 1.4)

Синтаксис

element dbConnect ( string databaseType, string host [, string username = "", string password = "", string options = "" ] )

Синтаксис ООП Помогите! Я не понимаю, что это!

Метод: Connection(...)

Обязательные параметры

  • databaseType: Тип базы данных. Может быть sqlite или mysql
  • host: Цель для подключения. Формат зависит от типа базы данных.
    • Для SQLite это путь к файлу SQLite базы данных. Если путь начинается с ":/" будет использоваться глобальный каталог баз данных сервера. Файл будет создан, если он не существует.
    • Для MySQL это список формата ключ=значение, разделенный точкой с запятой. Поддерживаются следующие ключи:
      • dbname: Имя базы данных для использования. Например: dbname=test
      • host: Адрес хоста. Например: host=127.0.0.1
      • port: Порт хоста. Например: port=1234 (опционально, по умолчанию используется стандартный порт MySQL)
      • unix_socket: Unix-сокет или именованный канал для использования (опционально)

Необязательные параметры

  • username: Обычно требуется для MySQL, игнорируется для SQLite
  • password: Обычно требуется для MySQL, игнорируется для SQLite
  • options : Список ключей = Пары значений, которые разделены точкой с запятой. Поддерживаемые ключи:
    • share может быть установлен на 0 или 1. (Значение по умолчанию для SQLite это "share=1", а для MySQL это "share=0"). Когда установлено значение 1, подключение становится общим и это будет использоваться другими вызовами dbConnect с той же строкой хоста. Это обычно хорошо для SQLite подключений, но не очень хорошо для MySQL если не соблюдать осторожность.
    • batch может быть установлен на 0 ил 1. (По умолчанию "batch=1"). Когда установлено на 1, запросы, вызываемые в одном кадре, автоматически объединяются, что может значительно ускорить вставку / обновление. Недостатком является то, что вы теряете контроль над функцией, которая используется для достижения пакетной обработки (для SQLite это транзакции, для MySQL это режим autocommit). Следовательно, если вы используете транзакции, блокируете таблицы или управляйте режимом autocommit самостоятельно, вы можете отключить эту функцию.
    • autoreconnect может быть установлен на 0 или 1. (По умолчанию "autoreconnect=1"). Когда установлено на 1, разорванные подключения будут автоматически переподключены. Обратите внимание, что переменные сеанса (вкл. SET NAMES), пользовательские переменные, закрытые и временные таблицы будут сброшены из-за переподключения. Так что, если вы используете необычные функции, вам нужно будет отключить автоподключение и справиться с разорванными соединениями другим способом.
    • log может быть установлен на 0 или 1. (Значение по умолчанию "log=1"). Когда установлено на 0, активность с данного подключения не будет записана в файл журнала отладки базы данных..
    • tag (Значение по умолчанию "tag=script"). Строка, которая помогает идентифицировать активность этого соединения в файле журнала отладки базы данных.
    • suppress разделенный запятыми список кодов ошибок, которые следует игнорировать. (например "suppress=1062,1169").
    • charset если вы хотите общаться с сервером, используя набор символов, отличный от набора по умолчанию, вам необходимо указать, какой из них. (например "charset=utf8"). (используется только в MySQL)

Возвращает

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

Пример

В этом примере открывается соединение с файлом базы данных SQLite в текущем ресурсе.

test_db = dbConnect( "sqlite", "file.db" )

В этом примере открывается соединение с файлом базы данных SQLite в другом ресурсе.

test_db = dbConnect( "sqlite", ":resname/file.db" )

В этом примере открывается соединение с файлом базы данных SQLite в каталоге глобальных баз данных.

test_db = dbConnect( "sqlite", ":/file.db" )

В этом примере открывается соединение с файлом базы данных SQLite в подкаталоге каталога глобальных баз данных.

test_db = dbConnect( "sqlite", ":/example/sub/dir/file.db" )

В этом примере открывается соединение с базой данных MySQL с именем «frank» на сервере с ip 1.2.3.4 используя набор символов utf8 и с разрешением совместного использования соединения. Обратите внимание, что изменение базы данных или других зависимых от подключения настроек влияет на все общие подключения.

test_db = dbConnect( "mysql", "dbname=frank;host=1.2.3.4", "username", "password", "share=1" )

В этом примере открывается соединение с базой данных SQLite, запрещается совместное использование соединения.

test_db = dbConnect( "sqlite", "file.db", "", "", "share=0" )

В этом примере выводится сообщение об отладке, установлено ли соединение с базой данных SQLite или нет

test_db = dbConnect( "sqlite", "file.db" )

if test_db then
    outputDebugString( "Связь с базой данных была успешно установлена." )
else
    outputDebugString( "Не удалось установить соединение с базой данных." )
end

В следующем примере показано, как можно найти общий ресурс для операций с базой данных с экспортированными функциями (запросить и выполнить):

function connect()
    DBConnection = dbConnect( "mysql", "dbname=DBNAME;host=HOST;charset=utf8", "USERNAME", "PASSWORD" )
    if (not DBConnection) then
        outputDebugString("Ошибка: не удалось установить соединение с сервером базы данных MySQL")
    else
        outputDebugString("Успешно: Соединено с сервером базы данных MySQL")
    end
end

addEventHandler("onResourceStart",resourceRoot, connect)
 
function query(...)
    local queryHandle = dbQuery(DBConnection, ...)
    if (not queryHandle) then
        return nil
    end
    local rows = dbPoll(queryHandle, -1)
    return rows
end
 
function execute(...)
    local queryHandle = dbQuery(DBConnection, ...)
    local result, numRows = dbPoll(queryHandle, -1)
    return numRows
end

function getDBConnection()
    return DBConnection
end

Требования

Минимально поддерживаемый сервер 1.1.1-9.03328
Минимально поддерживаемый клиент n/a

Примечание: Использование этой функции требует указания минимальной версии в разделе <min_mta_version> meta.xml ресурса. Пример: <min_mta_version server="1.1.1-9.03328" />


Список изменений

Version Description
1.3.1-9.04817 Добавлены опции 'log', 'tag' и 'suppress'
1.3.5-9.06386 Добавлена опция 'charset'

Смотрите также

Template:RU/Registry functions