Je possède ce tableau d'exemple sur MySQL v.5.7.17 (InnoDB, lignes 5,000):MySQL retour de requêtes différentes lignes après OPTIMIZE TABLE (de PHP)
+-------+----------+ | code1 | code2 | +-------+----------+ | 4714 | 15895510 | | 1041 | 10000158 | | 2866 | 10000000 | (...)
Code 1 est indexé.
Je test avec une requête simple: SELECT code2 FROM codes WHERE code1=1041
Cas 1: Je l'exécuter sur la console MySQL et retourner la valeur correcte 10000158
.
Cas n ° 2: je le lance à partir de PHP (mysqli_query()) et aucune ligne retourné (mysqli_num_rows() = 0). Si je cours la même requête mais avec un code différent1 (WHERE code1=2866
) j'obtiens un résultat correct: 10000000
.
J'ai fait beaucoup de tests et n'ai jamais eu le rang pour code1=1041
.
Enfin, je cours un OPTIMIZE TABLE codes
et j'obtiens la bonne valeur de code1=1041
! Je suis surpris!
Depuis la console a toujours fonctionné. A partir de PHP, certains enregistrements n'étaient pas affichés. Comment OPTIMIZE TABLE peut-il résoudre ce problème en PHP? Cela pourrait-il être une corruption dans l'index et affecter seulement le moteur PHP-Mysqli?
Merci!
Je suppose que vos données sous-jacente est en train de changer. –
Votre code PHP pour interroger la base de données peut-il être faux? –
Lorsque j'ai détecté le problème, j'ai créé un script uniquement pour rechercher l'erreur. Ce script n'avait que le code de base pour établir la connexion ('mysqli_connect') et la requête (' mysqli_query'). Et je teste avec ('mysqli_num_rows'). À ce moment, aucun utilisateur ne modifie la table. – BeAsT