Введение
Анализирует базы данных (. SQL файлы) в базу данных MySQL. Он будет искать файл для любых таблиц, а также создавать те, решают, как и любые соответствующие данные таблицы, и дополнительные запросы.
Какой в этом смысл?
Дело в том, что он может сохранить вам время. Вы можете разобрать запросы легко, без необходимости входа в PhpMyAdmin , и может быть полезным для некоторых владельцев серверов .
Установка
Просто загрузите "SQL-parser.inc" и добавить его в начале вашего скрипта:
Code: Select all
#include <sql-parser>
Пример с "mysql_parse":
Code: Select all
new
handle = mysql_connect("127.0.0.1", "root", "my_database", "");
if (fexist("db_dump.sql"))
{
mysql_parse("db_dump.sql", handle);
fremove("db_dump.sql");
}
Совместимые версии
Это совместимо с MySQL R7 и более новых версиях (благодаря IZN).
Автор: Emmet_
- Инклуд
Code: Select all
// MySQL parser by Emmet_
// R33+ compatability by iZN
#tryinclude <a_mysql>
#if !defined MAX_QUERY_BUFFER
#define MAX_QUERY_BUFFER (8192)
#endif
static stock
g_QueryString[MAX_QUERY_BUFFER] = "";
stock mysql_parse(const file[], connectionHandle = 1)
{
new
File:fHandle = fopen(file, io_read),
string[200],
pos = -1
;
if (fHandle)
{
new
#if defined PARSER_DEBUG
iQueries,
iTables,
iRows,
#endif
bool:bCreateTable,
bool:bInsertRow
;
while (fread(fHandle, string, sizeof(string)))
{
// Most likely a comment, let's skip it.
if ((string[0] == '-' && string[1] == '-'))
continue;
// Check to see if one of the last characters is a semi-colon.
// Some queries are spread out within the database dump.
for (new len = strlen(string), i = len; --i >= 0; )
{
if (string[i] <= ' ')
continue;
if (string[i] == ';' && (len - i) >= 10)
{
pos = i;
break;
}
}
if (pos != -1 && (!bCreateTable && !bInsertRow))
{
// We've found a result, so let's cut off the rest of the string.
string[pos + 1] = '\0';
// Execute the query.
#if defined mysql_tquery
mysql_tquery(connectionHandle, string, "", "");
#elseif defined mysql_function_query
mysql_function_query(ConnectionHandle, string, false, "", "");
#endif
// Reset "pos" back to -1.
pos = -1;
#if defined PARSER_DEBUG
iQueries++;
#endif
}
if (strfind(string, "CREATE TABLE", true) != -1) {
bCreateTable = true;
}
else if (strfind(string, "INSERT INTO", true) != -1) {
bInsertRow = true;
}
if (bCreateTable || bInsertRow)
{
strcat(g_QueryString, string);
// Find the last semi-colon in the string.
// If "bCreateTable or "bInsertRow" is true, it's most likely a huge query we're processing.
for (new i = strlen(string); --i >= 0; )
{
// Strip leading spaces.
if (string[i] <= ' ')
continue;
if (string[i] == ';')
{
// Execute the query.
#if defined mysql_tquery
mysql_tquery(connectionHandle, g_QueryString, "", "");
#elseif defined mysql_function_query
mysql_function_query(ConnectionHandle, g_QueryString, false, "", "");
#endif
// Reset the variables back to false.
if (bCreateTable)
{
#if defined PARSER_DEBUG
iTables++;
#endif
bCreateTable = false;
}
if (bInsertRow)
{
#if defined PARSER_DEBUG
iRows++;
#endif
bInsertRow = false;
}
// Reset the string by blanking the cell.
g_QueryString[0] = '\0';
}
}
}
}
fclose(fHandle);
#if defined PARSER_DEBUG
printf("[sql-parser] %d queries, %d tables and %d rows executed successfully.", iQueries, iTables, iRows);
#endif
}
return 1;
}
#undef MAX_QUERY_BUFFER