2012-09-01 13 views
21

W PHP, próbuję wykonać długie zapytanie MySql, które zależy od danych wprowadzanych przez użytkownika. Jednak moje zapytanie nie powiedzie się z następującym komunikatem,jak wyświetlić błąd MySql w php

"Query Failed". 

Właściwie mam wydrukowane tę wiadomość, gdy kwerenda nie powiedzie się, ale mam twardy czas szuka Powodem awarii. Niestety nie mogłem go znaleźć, ponieważ błąd nie został określony na stronie internetowej. Moje pytanie brzmi, czy istnieje sposób wyświetlenia komunikatu o błędzie, który spowodował niepowodzenie na stronie internetowej. Dziękuję Ci.

Oto mój kod,

$from= "Findings"; 
    $where=""; 

    if($service!= null) 
    { 

     $from = $from . ", ServiceType_Lookup"; 
     $where= "Findings.ServiceType_ID= ServiceType_Lookup.ServiceType_ID AND ServiceType_Name= ". $service; 

     if($keyword!= null) 
     $where= $where . " AND "; 

    } 

    if($keyword != null) 
    { 

    $where= $where . "Finding_ID LIKE '%$keyword%' OR 
         ServiceType_ID LIKE '%$keyword%' OR 
         Title LIKE '%$keyword%' OR 
         RootCause_ID LIKE '%$keyword%' OR 
         RiskRating_ID LIKE '%$keyword%' OR 
         Impact_ID LIKE '%$keyword%' OR 
         Efforts_ID LIKE '%$keyword%' OR 
         Likelihood_ID LIKE '%$keyword%' OR 
         Finding LIKE '%$keyword%' OR 
         Implication LIKE '%$keyword%' OR 
         Recommendation LIKE '%$keyword%' OR 
         Report_ID LIKE '%$keyword%'"; 
    } 


    $query = "SELECT Finding_ID, 
         ServiceType_ID, 
         Title, 
         RootCause_ID, 
         RiskRating_ID, 
         Impact_ID, 
         Efforts_ID, 
         Likelihood_ID, 
         Finding, 
         Implication, 
         Recommendation, 
         Report_ID FROM ".$from . " WHERE " . $where; 




    echo "wala 2eshiq";    


    $this->result = $this->db_link->query($query); 
    if (!$this->result) { 


printf("Query failed: %s\n", mysqli_connect_error()); 
exit;       
    } 

    $r = mysqli_query($this->db_link, $query); 
    if($r==false) 
    printf("error: %s\n", mysqli_errno($this->db_link)); 
+1

Możesz po prostu użyć: '$ this-> db_link-> error', aby uzyskać ostatni komunikat o błędzie. Dla wszystkich błędów użyj '$ this-> db_link-> lista_błędów'. – hakre

Odpowiedz

25

Użyj tego:

mysqli_query($this->db_link, $query) or die(mysqli_error($this->db_link)); 
# mysqli_query($link,$query) returns 0 if there's an error. 
# mysqli_error($link) returns a string with the last error message 

Można również użyć tego, aby wydrukować kod błędu.

echo mysqli_errno($this->db_link); 

Spójrz here i here

+0

zadziałało. Dziękuję. –

8

użycie funkcji die()

or die(mysql_error()); 
+12

Używa 'mysqli_ *', staraj się nie nakazywać mu używania 'mysql_ *'. – David

1
mysql_query("YOUR QUERY") OR die("Error:".mysql_error()); 
+2

Używa 'mysqli_query'. Nieodpowiedzialne jest sugerowanie, że regresuje do 'mysql_query'. – David

+0

Dobra, rozumiem. Dzięki David. –

1

na sugestie dotn pracy, ponieważ są one dla standardowego sterownika mysql, nie dla mysqli,

$this->db_link->error zawiera błąd jeśli nie wystąpiły

lub

mysqli_error($this->db_link) 

zadziała

4

używam następujących aby włączyć wszystko na raportowania dla MySQLi

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

* Uwaga błąd: nie używać to w środowisku produkcyjnym.

0

spróbować czegoś takiego:

$link = @new mysqli($this->host, $this->user, $this->pass) 
$statement = $link->prepare($sqlStatement); 
       if(!$statement) 
       { 
        $this->debug_mode('query', 'error', '#Query Failed<br/>'.$link->error); 
        return false; 
       } 
0

Przydatnym linia kodu dla Ciebie byłoby

$sql = "Your SQL statement here"; 
$result = mysqli_query($sql) or trigger_error("Query Failed! SQL: $sql - Error: ".mysqli_error(), E_USER_ERROR); 

Ta metoda jest lepsza niż śmierć, ponieważ można go używać dla rozwoju i produkcji, jest to stałe rozwiązanie.