Часто требуется, написать какой-нибудь простой скрипт, в котором требуется поддержка БД. И я заметил, что частенько пишу небольшие обертки, для более удобной работы..
Я не претендую на открытие чего-то уникального, но этот класс экономит время потраченное на написание одних и тех же функций:
<?php class sql { // Version: 1.0.1 {2012-01-10} public static function connect($host,$user,$pass,$db=NULL,$charset=NULL) { if (!mysql_connect($host,$user,$pass)) die('Can not connect to database'); if (!is_null($db)) self::usedb($db); if (!is_null($charset)) self::set_charset($charset); } // end of function public static function set_charset($charset='utf8') { self::query("SET character_set_results = '".$charset."', character_set_client = '".$charset."', character_set_connection = '".$charset."', character_set_database = '".$charset."', character_set_server = '".$charset."' "); } // end of function public static function usedb($db) { if (!mysql_select_db($db)) die('Can not select database'); } // end of function public function disconnect() { @mysql_close(); } // end of function public static function query($sql, $die=TRUE) { $ret = mysql_query($sql); if ($die AND self::error()) die(self::error()); return $ret; } // end of function public static function error() { return mysql_error(); } // end of function public static function get_var($sql) { $ret = NULL; $r = self::query($sql); if (is_resource($r) AND mysql_num_rows($r)) { $row = mysql_fetch_array($r); $ret = $row[0]; } return $ret; } // end of function public static function get_results($sql) { $ret = NULL; $r = self::query($sql); if (is_resource($r) AND mysql_num_rows($r)) { $ret = Array(); while($row = mysql_fetch_assoc($r)) { $ret[] = $row; } } return $ret; } // end of function public static function get_row($sql) { $ret = NULL; $r = self::query($sql); if (is_resource($r) AND mysql_num_rows($r)) { $ret = mysql_fetch_assoc($r); } return $ret; } // end of function public static function affected() { return mysql_affected_rows(); } // end of function public static function esc($str, $quote=TRUE, $trim=TRUE, $md5=FALSE) { if ($trim) $str = trim($str); if ($md5) $str = md5($str); $str = mysql_real_escape_string($str); if ($quote) { if (!is_string($quote) OR !in_array($quote,Array('"',"'"))) $quote='"'; $str = $quote.$str.$quote; } return $str; } } // end of class
Ну, и простейший пример использования:
<?php sql::connect('localhost','root','','my-test-db'); $str = " It's a perfect world! "; print_r(sql::get_var('SELECT '.sql::esc($str)));
Комментарии (4)
Спасибо большое за такой отличный ответ)) Просто у меня проблема, уже руки опускаются(( Я устанавливая icpmaneger,nginx, fail2ban, zand, ioncub и т.д. После чего через несколько часов начинает кудато деваться память. В isp появляется ошибка что не хватает оперативной памяти. Виртуализация OpenVZ памяти 768Мб. Буду разбираться дальше. Я грешил на процесс mysql который на принтскрине. Думаю попробовать как написано у тебя в статье : "Linux, кто съел всю память?" Спасибо за блог, много чего полезного для себя узнал! И продолжаю узнавать)))
Память может кушать кто угодно, в htop нажми F6[Sort By] и выбери Mem,%. И смотри какой процесс съедает память.
Это могут быть скрипты, могут быть сервера типа MySQL или nginx. Когда определишь кто балуется, смотри конфиги.
Например, у тебя может быть так настроен MySQL что он съедает всю память, тогда надо воспользоваться тюнерами, типа tuning-primer.sh и донастроить конфигурацию.
А может быть у тебя посыпалась большая таблица, и MySQL запустил восстановление и все запросы к этой таблице встают в очередь, чем и создают небывалое потребление памяти, проверить это можно, выполнив SQL команду: SHOW PROCESSLIST; если будет висеть много запросов это оно.
Так же посмотри /var/log/syslog, возможно там увидишь сообщения от процесса которому не хватает памяти.
Здравствуйте Виталий. Не знал как С Вами связаться, пришлось оставить комент. Извеняюсь за это))
Помогите пожалуйста. У меня есть VPS стоит kentos в htop висят какието процессы с надъписью error, я подозриваю что так не должно быть. вобщем посмотрите пожалуй на принтскрин я красным обвел эти процессы. http://screenshot.su/show.php?img=940fd02011e6bb9fa0b34d3664484f02.jpg
Вот строчка подозрительного процесса
16099 mysql 25 0 414M 21440 6196 S 0.0 2.7 0:00.00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/lib/mysql/v-host4yo
Привет!
Комментарии именно для связи и нужны, поэтому правильно сделал что написал сюда!
Те процессы, что ты обвел, стандартные, их назначение можешь погуглить более точно, вкратце так:
- rsyslogd = системный демон отвечающий за запись логов
- /usr/libexec/mysql = это демон базы данных MySQL
- /usr/sbin/named = это демон dns-а
т.е. процессы эти всего скорее нормальные и никаких проблем с ними нет. То, что их несколько, это тоже не проблема, так и должно быть.
На скриншоте, я не увидел надписей error, поэтому не совсем понимаю о чем ты. Если ты о вот этой части:
--log-error=/var/lib/mysql/v-host4yo
то это просто параметры передаваемые демоны во время запуска, в частности, этот параметр указывает куда записывать ошибки.
Если у тебя все же есть подозрения о каких либо процессах, то могу посоветовать делать так:
1) Поставить себе в виртуальную машину точно такую же ОС
2) Сравнить процессы, которые будут в твоей установке с процессами которые будут на сервере.
3) Если будут отличия, тогда первое что нужно сделать, спросить у тех.поддержки хостера, что это за процессы. Т.к. хостер может добавлять какой-то специфический софт, для обеспечения более оптимальной работы VPS.
4) Если хостер не знает, и ты не знаешь, тогда остается только гуглить
5) Если так и не удалось идентифицировать процесс, то надо либо обращаться к админам (например найти на weblancer.net), либо если это не возможно по тем или иным причинам, просто сделать чистую установку.
Если ошибки у тебя показываются где-то в другом месте (например, не влезли на скриншот), выложи скриншот, где видно именно их.