Данный код любезно предоставлен MuToGeN ( [email protected]) Код | <? // имя хоста MySQL сервера: $dbHost="127.0.0.1";
// логин MySQL: $dbLogin="root";
// пароль MySQL: $dbPass="";
// используемая по умолчанию база данных: $dbName="db_name";
// сообщение, которое выдается клиенту, если произошла // ошибка и режим отладки отключен: $dbErrorMsg="An error occured.<br>\nPlease try again later.<br>\n";
// режим отладки: если true, то все сообщения об ошибках // будут передаваться клиенту, если false, то клиенту выдается // $dbErrorMsg, а сообщение об ошибке отправляется на // емаил разработчику $debug=true;
// емаил разработчика: используется для пересылки сообщений // об ошибках, если режим отладки отключен $developerEmail="[email protected]";
// error reporting function report($msg) { global $debug,$dbErrorMsg,$developerEmail; if($debug) echo nl2br("<b>$msg</b>"); else { mail($developerEmail,"MySQL error",$msg); echo $dbErrorMsg; } exit(); }
// mysql_query() + проверка правильности запроса и report(), // если запрос содержал ошибки function mq($query) { global $REQUEST_URI; $result=@mysql_query($query); $error=mysql_errno(); if($error!=0) { $msg="MySQL query error.\nQuery was:\n$query\nMySQL returned:\n$error: ". mysql_error()."\n\$REQUEST_URI:\n$REQUEST_URI"; report($msg); } return $result; }
// пытается установить постоянное соединение с MySQL сервером, // если не получается, то пытается установить обычное соединение, // если и это не выходит, то report(). если соединение было // установлено, то выбирает БД ($dbName) function connect() { global $link,$isPersistent,$dbHost,$dbLogin,$dbPass,$dbName; $link=@mysql_pconnect($dbHost,$dbLogin,$dbPass); if(!$link) { $isPersistent=true; $link=@mysql_connect($dbHost,$dbLogin,$dbPass); if(!$link) { $msg="Could not open both persistent and temporary connection to MySQL DB server: $dbLogin@$dbHost"; report($msg); } } else $isPersistent=false; mq("USE $dbName;"); }
// проверяет, было ли соединение с MySQL постоянным, если нет, // то разрывает соединение function disconnect() { global $link,$isPersistent; if(!$isPersistent) mysql_close($link); } ?>
пример:
<?
require("db_lib.php"); // приведенный выше фаил
connect();
$r=mq("SELECT host FROM mysql.user;"); // то же самое, что $r=mysql_query("SELECT host FROM mysql.user;");, // запрос без ошибок.
$r=mq("SELECT nonExistentField FROM mysql.user;"); // ошибочный запрос. выдаст клиенту или перемылит // разработчику (в зависимости от $debug) сообщение с // описанием ошибки: Unknown column 'nonExistentField' in 'field list'
disconnect();
?>
|
Немного доработал mq(), логирование запросов. Если второй параметр true, то все сейвится в sql.log в той же папке, где лежил скрипт, в который заинклюдили эту библиотечку. Полезно для поиска семантических ошибок в запросах. Код | function mq($query,$log=false){ global $REQUEST_URI; $result=@mysql_query($query); $error=mysql_errno(); if($error!=0){ $msg="MySQL query error.\nQuery was:\n$query\nMySQL returned:\n$error: ". mysql_error()."\n\$REQUEST_URI:\n$REQUEST_URI"; report($msg); } if($log){ $fp=fopen("./sql.log","a"); fwrite($fp,$PHP_SELF.", ".date("d.m.Y H:i:s").": ".$query."\r\n"); fclose($fp); } return $result; } |
|