<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multitheftauto.com/wiki/RU/executeSQLQuery?action=history&amp;feed=atom</id>
	<title>RU/executeSQLQuery - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multitheftauto.com/wiki/RU/executeSQLQuery?action=history&amp;feed=atom"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=RU/executeSQLQuery&amp;action=history"/>
	<updated>2026-04-25T17:46:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=RU/executeSQLQuery&amp;diff=65365&amp;oldid=prev</id>
		<title>Yoodie: Created page with &quot;__NOTOC__ {{Server function}} Эта функция выполняет произвольный запрос SQL и возвращает строки результата, е...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=RU/executeSQLQuery&amp;diff=65365&amp;oldid=prev"/>
		<updated>2020-03-11T06:40:43Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;__NOTOC__ {{Server function}} Эта функция выполняет произвольный запрос SQL и возвращает строки результата, е...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Server function}}&lt;br /&gt;
Эта функция выполняет произвольный запрос SQL и возвращает строки результата, если они существуют. Это обеспечивает привязку параметров для безопасности (предотвращает SQL-инъекции).&lt;br /&gt;
{{Примечание| Эта функция действует только для registry.db. Используйте dbQuery для запроса пользовательской базы данных SQL.}}&lt;br /&gt;
==Синтаксис==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
table executeSQLQuery ( string query [, var param1 [, var param2 ... ] ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Обязательные аргументы===&lt;br /&gt;
*'''query:''' SQL-запрос. Позиции, в которые будут вставлены значения параметров, отмечены знаком &amp;quot;?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Необязательные аргументы===&lt;br /&gt;
*'''paramX:''' переменное количество параметров. Это должны быть строки или числа - важно убедиться, что они имеют правильный тип. Кроме того, количество передаваемых параметров должно быть равно количеству &amp;quot;?&amp;quot; символы в строке запроса.&lt;br /&gt;
&lt;br /&gt;
Строковые параметры автоматически экранируются добавлением обратной косой черты \ перед символами ' и \&lt;br /&gt;
&lt;br /&gt;
===Возвращает===&lt;br /&gt;
Возвращает таблицу с результатом запроса, если это был запрос SELECT, или ''false'', если это не так. В случае запроса SELECT таблица результатов может быть пустой (если строк результатов нет). Таблица имеет вид:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    { colname1=value1, colname2=value2, ... },&lt;br /&gt;
    { colname1=value3, colname2=value4, ... },&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Следующая таблица представляет следующую строку.&lt;br /&gt;
&lt;br /&gt;
==Пример==&lt;br /&gt;
&lt;br /&gt;
Ниже приведены примеры эквивалентов для устаревших функций executeSQL. Обратите внимание, что ` (символ) может использоваться для окружения имен таблиц и строк. Обычно это хорошая идея, чтобы избежать конфликтов имен с зарезервированными словами SQL.&lt;br /&gt;
&lt;br /&gt;
Эквивалент executeSQLCreateTable:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
executeSQLQuery(&amp;quot;CREATE TABLE IF NOT EXISTS players (clothes_head_texture TEXT, clothes_head_model TEXT, name TEXT)&amp;quot;)&lt;br /&gt;
executeSQLQuery(&amp;quot;CREATE TABLE IF NOT EXISTS `players` (`clothes_head_texture` TEXT, `clothes_head_model` TEXT, `name` TEXT)&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эквивалент executeSQLDelete:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
playerName = getPlayerName(thePlayer)&lt;br /&gt;
executeSQLQuery(&amp;quot;DELETE FROM players WHERE name=?&amp;quot;, playerName)&lt;br /&gt;
executeSQLQuery(&amp;quot;DELETE FROM `players` WHERE `name`=?&amp;quot;, playerName)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эквивалент executeSQLDropTable: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
executeSQLQuery(&amp;quot;DROP TABLE players&amp;quot; )&lt;br /&gt;
executeSQLQuery(&amp;quot;DROP TABLE `players`&amp;quot; )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эквивалент executeSQLSelect: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
playerName = getPlayerName(thePlayer)&lt;br /&gt;
executeSQLQuery(&amp;quot;SELECT score,health FROM players WHERE name=?&amp;quot;, playerName )&lt;br /&gt;
executeSQLQuery(&amp;quot;SELECT `score`,`health` FROM `players` WHERE `name`=?&amp;quot;, playerName )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эквивалент executeSQLInsert: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
playerName = getPlayerName(thePlayer)&lt;br /&gt;
colorName = &amp;quot;Blue&amp;quot;&lt;br /&gt;
soundName = &amp;quot;sound.mp3&amp;quot;&lt;br /&gt;
executeSQLQuery(&amp;quot;INSERT INTO players(name,color,sound) VALUES(?,?,?)&amp;quot;, playerName, colorName, soundName )&lt;br /&gt;
executeSQLQuery(&amp;quot;INSERT INTO `players`(`name`,`color`,`sound`) VALUES(?,?,?)&amp;quot;, playerName, colorName, soundName )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эквивалент executeSQLUpdate: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
playerName = getPlayerName(thePlayer)&lt;br /&gt;
colorName = &amp;quot;Blue&amp;quot;&lt;br /&gt;
soundName = &amp;quot;sound.mp3&amp;quot;&lt;br /&gt;
executeSQLQuery(&amp;quot;UPDATE players SET color='green',sound='somehead' WHERE name=?&amp;quot;, playerName )&lt;br /&gt;
executeSQLQuery(&amp;quot;UPDATE players SET color=?,sound=? WHERE name=?&amp;quot;, colorName, soundName, playerName )&lt;br /&gt;
executeSQLQuery(&amp;quot;UPDATE `players` SET `color`=?,`sound`=? WHERE `name`=?&amp;quot;, colorName, soundName, playerName )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом примере определяется консольная команда, которая показывает идентификаторы и имена всех зарегистрированных (сохраненных в базе данных) игроков, у которых сумма денег превышает указанную.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function listPlayersWithMoreMoneyThan(thePlayer, command, amount)&lt;br /&gt;
    local players = executeSQLQuery(&amp;quot;SELECT id, name FROM players WHERE money &amp;gt; ?&amp;quot;, tonumber(amount))&lt;br /&gt;
    outputConsole(&amp;quot;Players with more money than &amp;quot; .. amount .. &amp;quot;:&amp;quot;, thePlayer)&lt;br /&gt;
    for i, playerdata in ipairs(players) do&lt;br /&gt;
        outputConsole(playerdata.id .. &amp;quot;: &amp;quot; .. playerdata.name, thePlayer)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
addCommandHandler(&amp;quot;richplayers&amp;quot;, listPlayersWithMoreMoneyThan)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом примере показано количество денег, которое имеет определенный зарегистрированный игрок.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function showPlayerMoney(thePlayer, command, playerName)&lt;br /&gt;
    local result = executeSQLQuery(&amp;quot;SELECT money FROM players WHERE name=?&amp;quot;, playerName)&lt;br /&gt;
    if(#result == 0) then&lt;br /&gt;
        outputConsole(&amp;quot;No player named &amp;quot; .. playerName .. &amp;quot; is registered.&amp;quot;, thePlayer)&lt;br /&gt;
    else&lt;br /&gt;
        outputConsole(&amp;quot;Money amount of player &amp;quot; .. playerName .. &amp;quot; is &amp;quot; .. result[1].money, thePlayer)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;playermoney&amp;quot;, showPlayerMoney)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на отсутствие одинарных кавычек вокруг &amp;quot;?&amp;quot; в этом примере, хотя он представляет строку. executeSQLQuery увидит, что переменная playerName является строкой, и позаботится о правильном выполнении запроса самостоятельно.&lt;br /&gt;
&lt;br /&gt;
Преимущество использования executeSQLQuery заключается в том, что он невосприимчив к пользователям, пытающимся использовать запрос с помощью атаки SQL-инъекцией. playerName может содержать специальные символы, такие как ', &amp;quot;или -, которые не будут влиять на запрос, в отличие от более старого подхода, где playerName будет объединяться в строку запроса.&lt;br /&gt;
[[en:ExecuteSQLQuery]]&lt;/div&gt;</summary>
		<author><name>Yoodie</name></author>
	</entry>
</feed>