Sergiy
Новичок
Оптимизация запросов и своя функция doquery ()
Работаю над скриптом браузерной игры.
Уже полностью рабочий, но возникает перегрузка обращений к БД.
Возможно, это из-за частого использования собственной функции, обращающейся к БД?
Вот она -
<?
function doquery($query, $table, $fetch = false){
global $numqueries,$link,$debug,$ugamela_root_path;
require($ugamela_root_path.'config.php');
if(!$link)
{$link = mysql_connect($dbsettings["server"], $dbsettings["user"],
$dbsettings["pass"]) or
$debug->error(mysql_error()."<br />$query","SQL Error");
mysql_select_db($dbsettings["name"]) or $debug->error(mysql_error()."<br />$query","SQL Error");
mysql_query("SET NAMES cp1251");
echo mysql_error();}
$sql = str_replace("{{table}}", $dbsettings["prefix"].$table, $query);
$sqlquery = mysql_query($sql) or
$debug->error(mysql_error()."<br />$sql<br />","SQL Error");
unset($dbsettings);
$numqueries++;
$arr = debug_backtrace();
$file = end(explode('/',$arr[1]['file']));
$line = $arr[1]['line'];
$debug->add("<tr><th>Query $numqueries: </th><th>$query</th><th>$file($line)</th><th>$table</th><th>$fetch</th></tr>");
if($fetch)
{$sqlrow = mysql_fetch_array($sqlquery);
return $sqlrow;
}else{return $sqlquery;}}
?>
Во всём скрипте в дальнейшем используется функция doquery и для чтения и для записи в БД (кстати она это действительно позволяет?).
Например $CurrentPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '". $user['current_planet'] ."';", 'planets', true);
Будет ли оптимизацией замена её на mysql_fetch для чтения?
И что тогда будет, если не отключаться от БД ?
Постоянное соединение юзера?
А при закрытии браузера он отсоединится автоматически?
Возможно ли, что при постоянных соединениях ошибка запроса в некоторых скриптах может заставить базу лежать долго?
Работаю над скриптом браузерной игры.
Уже полностью рабочий, но возникает перегрузка обращений к БД.
Возможно, это из-за частого использования собственной функции, обращающейся к БД?
Вот она -
<?
function doquery($query, $table, $fetch = false){
global $numqueries,$link,$debug,$ugamela_root_path;
require($ugamela_root_path.'config.php');
if(!$link)
{$link = mysql_connect($dbsettings["server"], $dbsettings["user"],
$dbsettings["pass"]) or
$debug->error(mysql_error()."<br />$query","SQL Error");
mysql_select_db($dbsettings["name"]) or $debug->error(mysql_error()."<br />$query","SQL Error");
mysql_query("SET NAMES cp1251");
echo mysql_error();}
$sql = str_replace("{{table}}", $dbsettings["prefix"].$table, $query);
$sqlquery = mysql_query($sql) or
$debug->error(mysql_error()."<br />$sql<br />","SQL Error");
unset($dbsettings);
$numqueries++;
$arr = debug_backtrace();
$file = end(explode('/',$arr[1]['file']));
$line = $arr[1]['line'];
$debug->add("<tr><th>Query $numqueries: </th><th>$query</th><th>$file($line)</th><th>$table</th><th>$fetch</th></tr>");
if($fetch)
{$sqlrow = mysql_fetch_array($sqlquery);
return $sqlrow;
}else{return $sqlquery;}}
?>
Во всём скрипте в дальнейшем используется функция doquery и для чтения и для записи в БД (кстати она это действительно позволяет?).
Например $CurrentPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '". $user['current_planet'] ."';", 'planets', true);
Будет ли оптимизацией замена её на mysql_fetch для чтения?
И что тогда будет, если не отключаться от БД ?
Постоянное соединение юзера?
А при закрытии браузера он отсоединится автоматически?
Возможно ли, что при постоянных соединениях ошибка запроса в некоторых скриптах может заставить базу лежать долго?