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 ?
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!