web-dev-qa-db-fra.com

Comment afficher une erreur MySQL dans PHP pour une longue requête qui dépend de l'entrée utilisateur?

En PHP, j'essaie d'exécuter une longue requête MySQL qui dépend de l'entrée de l'utilisateur. Cependant, ma requête échoue avec le message suivant,

"Query Failed".

En fait, j'ai imprimé ce message chaque fois que la requête échoue, mais j'ai du mal à rechercher la raison de cet échec. Malheureusement, je ne l'ai pas trouvé car l'erreur n'est pas spécifiée sur la page Web. Existe-t-il un moyen d'afficher le message d'erreur à l'origine de l'échec sur la page Web?

Voici mon code,

$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));
24
Traveling Salesman

Utilisez ceci:

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

Vous pouvez également l'utiliser pour imprimer le code d'erreur.

echo mysqli_errno($this->db_link);

Jetez un oeil ici et ici

28
Christian

Utilisez la fonction die () :

or die(mysql_error());
9
Julien

J'utilise ce qui suit pour activer tous les rapports d'erreurs pour MySQLi

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

* NOTE: ne l'utilisez pas dans un environnement de production.

4
Arian Faurtosh
mysql_query("YOUR QUERY") OR die("Error:".mysql_error());
1
Suraj Gujar

Les suggestions ne fonctionnent pas car elles concernent le pilote MySQL standard, pas pour mysqli:

$this->db_link->error contient l'erreur si une s'est produite

Ou

mysqli_error($this->db_link)

marchera.

1
mc_fish

Essayez quelque chose comme ceci:

$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
Abdel Rahman Karim