| 
	 
	 
Здравствуйте, гость ( Вход | Регистрация )
 | 
	 
	 
			
			  9.3.2009, 19:37
			
				 Сообщение
					#21
					
				
			 
		 | 
	|
| 
        	
				
					 RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
       
			
			 
				DLL библиотека для работы с базой данных MySQL 5. 
			
			
			
					
		Версия lua: 5.1 Версия API: 2 Разрядность ОС: 32 Протестировано на PtokaX 0.4.1.1 Копирайт: Copyright © 2003-2007 Kepler Project LuaSQL is a simple interface from Lua to a DBMS Версия: LuaSQL 2.1.1 В связи с непонятной работой sqlite предлагаю перейти на стабильную и отчасти более функциональную базу данных. Хоть преимуществом sqlite и является работа на локальном компьютере и легкая переносимость, однако весь мир использует mysql и надо отдать должное - mysql великолепен! Теперь о содержимом библиотеки. Я прикладываю rar архив. В нём dll файл libmysql.dll и папка luasql с dll файлом mysql.dll. Обе эти дллелки нужны для работы бд. Распаковываем архив в папку, где лежит файл ptokax.exe (или в папку libs), и ничего никуда не перемещаем. После этого запускаем скрипт для тестирования. Основные функции для работы с mysql в lua 
 Объект - соединение (conn) 
 Объект - курсор (cur) 
 Как работать с таблицами для достижения большей производительности 
 -------------------- Если у вас нет mysql сервера, то качаем его, например отсюда: (файл mysql-5.0.67-win32.zip) Для удобного администрирования там же можно скачать утилиту mysqlgui-win32-static MySQL распространяется под GNU General Public License и под собственной коммерческой лицензией, на выбор. Архив с библиотеками под PtokaX 0.4.*.*:  
 mysql.rar ( 541.42 килобайт )
Кол-во скачиваний: 1673Скрипт примера работы с MySQL в LUA:  
 mysql_test.lua ( 1.63 килобайт )
Кол-во скачиваний: 458 | 
	
| 
			
			 | 
	|
![]()  | 
	
			
			  16.3.2009, 22:37
			
				 Сообщение
					#22
					
				
			 
		 | 
	|
        	
				
					![]() Самый главный активист :-D ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз  | 
       
			
			 
				что то я совсем запутался с этими структурами БД и их нормальными формами((( Очень хочется увидеть рабочий скрипт хоть какой нибудь! А в особенности хотелось бы увидеть скрипт сведения ников и ипов юзеров!!! Илюх(Setuper), очень прошу напиши как сможешь!!!!
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  21.4.2009, 19:23
			
				 Сообщение
					#23
					
				
			 
		 | 
	|
| 
        	
				
					 RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
       
			
			 
				Экранирование в MySQL. 
			
			
			
					
		Для начала - немного о кавычках. Если мы подставляем в запрос какие-либо данные, то, чтобы отличить эти данные от команд SQL, их надо брать в кавычки. К примеру, если написать Код SELECT * FROM mytable WHERE name = Nick то база решит, что Nick - это имя другого поля, не найдёт его, и выдаст ошибку. Поэтому подставляемые данные (в данном случае имя Nick) надо заключать в кавычки - тогда база сочтет его строкой, значение которой надо присвоить полю name:Код SELECT * FROM mytable WHERE name = 'Nick' Однако, и в самих данных могут тоже встречаться кавычки. К примеру,Код SELECT * FROM mytable WHERE name = 'Д'Артаньян' Здесь база данных решит, что 'Д' - это данные, а Артаньян - команда, которую она не знает, и тоже выдаст ошибку. Поэтому и надо прослешивать все данные, чтобы объяснить базе, что встречающиеся в них кавычки (и некоторые другие спецсимволы) относятся к данным.В результате мы получим правильный запрос, который ошибок не вызовет: Код SELECT * FROM mytable WHERE name = 'Д\'Артаньян' Таким образом, мы выяснили, что при подстановке данных в запрос, следует придерживаться двух правил: - все вставляемые в запрос данные должны быть заключены в кавычки (одинарные или двойные, но удобнее и чаще используются одинарные). - во всех строковых переменных должны быть экранированы слешами спецсимволы. Следует специально отметить: добавленные слеши НЕ идут в базу. Они нужны только в запросе. При попадании в базу слеши отбрасываются. Соответственно, распространенной ошибкой является попытка удалить слеши при получении данных из базы. На самом деле, всё вышесказанное относится к данным строкового типа и датам. Числа можно вставлять не прослешивая и не окружaя кавычками. Если вы так делаете, то ОБЯЗАТЕЛЬНО! насильно приводите данные к нужному типу перед вставкой в запрос, например: Код id = tonumber(id) Однако для простоты (и надёжности) можно и с числами работать, как со строками (проскольку mysql всё равно преобразует их к нужному типу). Соответственно, мы будем любые данные, вставляемые в запрос, прослешивать и заключать в кавычки.Так же, есть ещё одно правило - необязательное, но его следует придерживаться во избежание появления ошибок: Имена полей и таблиц следует заключать в обратные одинарные кавычки - `поле` (клавиша с этим символом находится на стандартной клавиатуре слева от клавиши "1") Ведь имя поля может совпадать с ключевыми словами mysql, но если мы используем обратную кавычку, то MySQL поймёт всё правильно: Код SELECT * FROM `WHERE` WHERE `DATE` = '2009-04-21' Следует различать эти кавычки и не путать одни с другими. Следует также помнить, что обратные кавычки слешами не экранируются! Наиболее эффективное экранирование. Для наиболее эффективного экранирования кавычек следует использовать функцию: Код _G.string.dbformat = function(self, ...) local t = {...} for k, v in _G.ipairs(t) do t[k] = _G.tostring(v):gsub("'", "\\'") end return self:format(_G.unpack(t)) end Рассмотрим пример использования данной функции на примере вставки в таблицу данных: Код con:execute(("INSERT INTO `mytable` (`nick`, `ip`, `client`, `share`) VALUES  Что мы сделали? Мы просто, так сказать, переопределили всем известный метод format, написав в качестве его аналога, метод dbformat, который выполняет тоже самое, что и метод format, но дополнительно к этому, он экранирует одинарные кавычки.
				
				
				
			('%s', '%s', '%s', '%s')"):dbformat("Д'Артаньян", "192.168.0.1", "StrgDC++", 27635467))  | 
	
| 
			
			 | 
	|
			
			  23.4.2009, 12:31
			
				 Сообщение
					#24
					
				
			 
		 | 
	|
        	
				
					![]() Главный ра******й тут... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 777 раз  | 
       
			
			 
				Увидев код сразу возникла мысль, что функция dbformat усложнена, вот выдержка из , которое всем программерам советую прочитать и не раз: 
			
			
			
					
		Цитата Переменное число параметров В Lua, как и в С, в функцию можно передавать переменное число параметров. Синтаксис также похож: function f(x, y, ...) end Все параметры, скрытые за ... Lua упаковывает в локальную таблицу arg. У таблицы arg есть поле n, содержащее число переданных аргументов. Для примера, напечатаем все переданные в функцию аргументы: function f(...) for i = 1, arg.n do print(arg[i]) end end f(1, 2, 3, "Вася") -- выведет соответственно 1, 2, 3, "Вася" Значит получается что лишнее вот это: Код   local t = {...} т.к. мы имеем уже локальную таблицу arg, правда с лишним параметром n, который легко исключается И еще, объясните мне смысл приставки _G., всегда делал без нее и все работало. Это сделано для реализации модулей или чего еще?  | 
	
| 
			
			 | 
	|
			
			  23.4.2009, 13:07
			
				 Сообщение
					#25
					
				
			 
		 | 
	|
| 
        	
				
					 RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
       
			
			 
				То, что написано по предложенной ссылке устарело и не работает в lua 5.1.  () 
			
			
			
					
		Переменная arg работает только в версиях ниже 5.1. В этом можно убедиться, выполнив соответствующий код. Поэтому ничего лишнего тут нету. Приставки _G можете не писать. Просто я взял реализацию этой функции из моего скрипта SBot, который написан с использованием модулей и ООП. Могу ещё добавить, что если оставить как написано (с _G), и ещё дописать перед функцией строку Код local _G = _G то это будет являться оптимизацией выполнения данного метода, причем добавленная строка не несёт расхода ресурсов на копирование, так как глобальная переменная тут копируется по ссылке, а не по значению, при этом, как известно, доступ к локальным переменным производится быстрее, чем к глобальным, - отсуда и оптимизация Всё же советую за основу изучения lua брать сайт так как этот сайт постоянно обновляется и дополняется lua программистами, и следит за всеми изменениями в языке. Кстати, ООП по предложенной ссылке не использует принципы инкапсуляции и наследования, поэтому оно в разы хуже предложенного мною ООП: http://mydc.ru/ipb.html?s=&showtopic=1...ost&p=10330 Хотя для ознакомления стоит прочитать. Некоторые намёки на инкапсуляцию там есть (правда не в описании ООП, а в начале статьи).  | 
	
| 
			
			 | 
	|
			
			  23.4.2009, 13:45
			
				 Сообщение
					#26
					
				
			 
		 | 
	|
        	
				
					![]() Главный ра******й тут... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 777 раз  | 
       
			
			 
				Ну да, зачем спорить!?!  
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  23.4.2009, 14:00
			
				 Сообщение
					#27
					
				
			 
		 | 
	|
| 
        	
				
					 RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
       
			
			 
				ООП полезен в любом скрипте, а особенно в больших. Язык Lua используется в играх, и там всё через ООП, так это самый эффективный путь.
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  24.4.2009, 20:11
			
				 Сообщение
					#28
					
				
			 
		 | 
	|
        	
				
					![]() Самый главный активист :-D ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз  | 
       
			
			 
				нужно ли создавать каждому скрипту отдельную БД или может назвать БД PtokaScripts и все скрипты будут её юзать? 
			
			
			
					
		ООП полезен в любом скрипте, а особенно в больших. Язык Lua используется в играх, и там всё через ООП, так это самый эффективный путь. Очень жду дельного примера))))))  | 
	
| 
			
			 | 
	|
			
			  25.4.2009, 9:01
			
				 Сообщение
					#29
					
				
			 
		 | 
	|
        	
				
					![]() Главный ра******й тут... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 777 раз  | 
       
			
			 
				Да, примеру будут рады все программеры  
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  25.4.2009, 9:48
			
				 Сообщение
					#30
					
				
			 
		 | 
	|
        	
				
					![]() Самый главный активист :-D ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз  | 
       
			
			 
				я буду называть БД PtokaScripts если есть другие предложения высказываемся(хотя по большому счёту наверно это не имеет никакого значения!)
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  25.4.2009, 10:15
			
				 Сообщение
					#31
					
				
			 
		 | 
	|
        	
				
					![]() Главный ра******й тут... ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 777 раз  | 
       
			
			 
				Илюх, я про префиксы, базу ты хоть как назови...  
			
			
			
					
		Код $INFO['sql_tbl_prefix']            =    'ibf_'; А вот из пхпмайадмина, тут таблицы галереи и вордпреса, это к примеру, как видишь чтобы они не перемешивались у них разные префиксы. Надеюсь доступно разстолковал что хочу чтобы было во всех скриптах! 
	Прикрепленные файлы
	
 
 | 
	
| 
			
			 | 
	|
			
			  25.4.2009, 10:24
			
				 Сообщение
					#32
					
				
			 
		 | 
	|
        	
				
					![]() Самый главный активист :-D ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз  | 
       
			
			 
				Это я понял)))))))
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  25.4.2009, 10:28
			
				 Сообщение
					#33
					
				
			 
		 | 
	|
| 
        	
				
					 RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
       
			
			 
				По-моему, про префиксы я уже где-то писал, но не важно. Важно то, что использование префиксов всегда оправданно, так же как и использование односторонних `кавычек`. 
			
			
			
					
		Что касается ООП, то я могу написать скрипт-пример, только подкиньте идейку скрипта  | 
	
| 
			
			 | 
	|
			
			  25.4.2009, 10:32
			
				 Сообщение
					#34
					
				
			 
		 | 
	|
        	
				
					![]() Самый главный активист :-D ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз  | 
       
			
			 
				Илюх, я бы подкинул идейку, но не понимаю где и в чём будет оптимизация при применение ООП! Поэтому и хочу увидеть скрипт))) любой
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  29.4.2009, 23:05
			
				 Сообщение
					#35
					
				
			 
		 | 
	|
        	
				
					![]() Абсолютный новичок Группа: Пользователи Сообщений: 3 Регистрация: 12.4.2009 Пользователь №: 3 017 Спасибо сказали: 0 раз  | 
       
			
			 
				А есть библиотеки на 64 битную винду?  
			
			
			
					
		32 битка не катит из-за поддержки только 3,5 гигов оперативки :(  | 
	
| 
			
			 | 
	|
			
			  30.4.2009, 0:00
			
				 Сообщение
					#36
					
				
			 
		 | 
	|
| 
        	
				
					 RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
       
			
			 
				нет. только x32
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  30.4.2009, 0:04
			
				 Сообщение
					#37
					
				
			 
		 | 
	|
        	
				
					![]() Местная ТехПоддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз  | 
       
			
			 
				если инетересует 64бита - есть для линукса. Правда линукс и в 32хбитном режиме тянет 4гига.
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  30.4.2009, 0:15
			
				 Сообщение
					#38
					
				
			 
		 | 
	|
| 
        	
				
					 RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз  | 
       
			
			 
				В 32 разрядных системах 4 Гб - это максимальный размер виртуальной памяти (2 ^ 32 б = 4 Гб)
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
			
			  30.4.2009, 0:26
			
				 Сообщение
					#39
					
				
			 
		 | 
	|
        	
				
					![]() Местная ТехПоддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз  | 
       
			
			 
				ядро собирается с опцией BigMEM и тянет дофига. (4 гига точно тянет, проверяли). даже загружаи спецтестом по максимуму. 
			
			
			
					
		правдя не для этой темы разговор.  | 
	
| 
			
			 | 
	|
			
			  30.4.2009, 1:44
			
				 Сообщение
					#40
					
				
			 
		 | 
	|
        	
				
					![]() Абсолютный новичок Группа: Пользователи Сообщений: 3 Регистрация: 12.4.2009 Пользователь №: 3 017 Спасибо сказали: 0 раз  | 
       
			
			 
				а можно собрать эту библиотеку на 64 разрядную windows? ) а то я в этом не силён... :( 
			
			
			
					
		4 гига тоже мало )) нужно хотя бы 6 =)  | 
	
| 
			
			 | 
	|
			
			  30.4.2009, 8:35
			
				 Сообщение
					#41
					
				
			 
		 | 
	|
        	
				
					![]() Местная ТехПоддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз  | 
       
			
			 
				ну мона и 64ре гига =) кто мещает ядро собрать как надо.
				
				
				
			 
			
			
			
					
		 | 
	
| 
			
			 | 
	|
![]() ![]()  | 
	
 Похожие темы
 
 | 
Сейчас: 4.11.2025, 15:23 |