Блог


Обертка для функции mysqli_query()

 

Писал статью про стиль кодирования, в частности про оформление SQL запросов, и в голову пришла интересная идея.

Меняем в функции mysqlQuery() пару строк, и она начнет подсвечивать проблемные участки.

Для этого нужно выдернуть из текста ошибки, который возвращает SQL интерпретатор, все, что находится в апострофах, и обернуть этот текст в самом запросе тегом с другим цветом. Все проще пареной репы.

Пока в уроках менять не буду, сыро это все, написано двадцать минут назад. Обкатать нужно сначала. Но вы можете уже воспользоваться. И если будут проблемы, отпишитесь. Поправим и вставим в уроки.

Вот листинг функции:

1
2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
<?php

/**  
* Функция для запроса к БД MySQL. 
*/ 
    
function mysqlQuery($sql$print false
    {
        if(!isset(
DB::$link))
            
DB::conhect();
     
        
DB::$count++;
        
        
$result mysqli_query(DB::$link$sql); 
     
        if(
$result === false || $print
        { 
            
$error =  mysqli_error(DB::$link); 
            
$trace =  debug_backtrace(); 
            
$out   = array('''');
            
            if(!empty(
$error))
                
preg_match("#'(.+?)'#is"$error$out);
          
            
$head $error ?'<b style="color:red">MySQL error: </b><br> 
            <b style="color:green">'
$error .'</b><br><br>':NULL;     
          
            
$error_log date("Y-m-d h:i:s") .' '$head .
            <b>Query: </b><br> 
            <pre><span style="color:#990099">'
            
str_replace($out[1], '<b style="color:red">'$out[1
            .
'</b>'$trace[0]['args'][0])
            .
'</pre></span><br><br>
            <b>File: </b><b style="color:#660099">'
$trace[0]['file'
            .
'</b><br> 
            <b>Line: </b><b style="color:#660099">'
$trace[0]['line'
            .
'</b>'
            
/** 
* @TODO To clean in release 
*/ 
//----------------------------- 
            
die($error_log); 
//----------------------------- 
         
            
file_put_contents(IRB_ROOT .'log/mysql.log'
                              
strip_tags($error_log) ."\n\n"
                              
FILE_APPEND
                              
); 
            
header("HTTP/1.1 404 Not Found"); 
            die(
file_get_contents(IRB_ROOT .'/404.html')); 
        } 
        else 
            return 
$result
    }  

 

А вот таков результат:

 

Ведь так намного приятнее, чем разбирать обычный результат mysqli_error(), да еще и если запрос в одну строку.

 

Николай aka twin

 

Теги: PHP | MySQL

Комментарии (1)

kdes70
20-03-2013
вот может пригодится кому тут тоже про логи
kobzarev.com/programming/writing-messages-to-the-syslog.html

 
Наверх