Maison >base de données >tutoriel mysql >Pourquoi est-ce que j'obtiens l'erreur « Erreur fatale : exception non interceptée 'mysqli_sql_exception' avec le message 'Aucun index utilisé dans la requête/instruction préparée' » dans MySQL ?

Pourquoi est-ce que j'obtiens l'erreur « Erreur fatale : exception non interceptée 'mysqli_sql_exception' avec le message 'Aucun index utilisé dans la requête/instruction préparée' » dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-01 12:04:11754parcourir

Why Am I Getting the

"Erreur fatale : exception non détectée 'mysqli_sql_exception' avec le message 'Aucun index utilisé dans la requête/instruction préparée'" Expliqué

Introduction

Lors de l'exécution de requêtes de base de données, vous pouvez rencontrer l'erreur « Erreur fatale : exception non interceptée ». 'mysqli_sql_exception' avec le message 'Aucun index utilisé dans la requête/instruction préparée'". Cet article vise à élucider les causes sous-jacentes et à fournir des solutions à cette erreur.

Évaluation du code PHP

$mysql = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('There was a problem connecting to the database');
if (mysqli_connect_errno()) {
    printf("DB error: %s", mysqli_connect_error());
    exit();
}

$get_emp_list = $mysql->prepare("SELECT id, name FROM calc");
if(!$get_emp_list){
    echo "prepare failed\n";
    echo "error: ", $mysql->error, "\n";
    return;
}
$get_emp_list->execute();
$get_emp_list->bind_result($id, $emp_list);

Analyse des erreurs

Le message d'erreur indique qu'un index est manquant dans la requête ou l'instruction préparée. Dans ce cas, la table MySQL "calc" n'a pas d'index sur les colonnes "id" et "name".

Solutions

Ajuster mysqli_report Paramètre

La fonction mysqli_report() peut être utilisée pour contrôler la gravité des avertissements et des erreurs signalés par MySQL. En définissant mysqli_report(MYSQLI_REPORT_OFF) ou mysqli_report(MYSQLI_REPORT_ERROR), vous pouvez désactiver les avertissements et signaler uniquement les erreurs, ce qui évitera l'erreur fatale dans ce cas.

mysqli_report(MYSQLI_REPORT_OFF);

Implémenter la gestion des erreurs

Une autre solution consiste à implémenter la gestion des erreurs à l'aide des blocs try{} et catch(). Cela vous permet de détecter et de gérer les erreurs et les avertissements qui se produisent lors des opérations de base de données.

try {
    $get_emp_list = $mysql->prepare("SELECT id, name FROM calc");
    if(!$get_emp_list){
        throw new Exception("Prepare failed");
    }
    $get_emp_list->execute();
    $get_emp_list->bind_result($id, $emp_list);
} catch (Exception $e) {
    echo "Error occurred: " . $e->getMessage() . "\n";
}

Créer des index sur la table

Pour résoudre le problème d'index sous-jacent, vous devez créez des index sur la table pour optimiser les performances des requêtes.

CREATE INDEX idx_emp_id ON calc (id);
CREATE INDEX idx_emp_name ON calc (name);

En implémentant ces solutions, vous pouvez résoudre l'erreur « Erreur fatale : exception non interceptée 'mysqli_sql_exception' avec le message d'erreur 'Aucun index utilisé dans la requête/instruction préparée'" et améliorez les performances de vos opérations de base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn