Quand tu ouvres une balise <?php, tout le code qu'elle contient va être interprété par php. Il ne s'attend à trouver que des choses qu'il connait (des fonctions, des variables, etc.)
Si en plein milieu du code, tu lui mets un TOTO, il va s'intérroger quelques minutes sur ce que tu es en train de lui demander (un peu comme un chien à qui tu vas demander de donner la patte la première fois). Si en revanche, tu lui mets 'TOTO', il va se dire ok, c'est une chaine, le développeur sait ce qu'il fait, je ne m'en préoccupe pas
En l'occurence, quand tu as l'instruction :
$tb = array(A, B, C);
php va analyser : "je déclare la variable $tb, à laquelle j'affecte un tableau, ce tableau contient A... tiens ? c'est quoi A ? c'est une constante ? hmm.. non ça n'a pas l'air vu que le dev l'a pas définie... peut être une chaine de caractères ? supposons que oui et poursuivons... ensuite nous avons B... tiens ? c'est quoi B ? c'est une constante ? ...
Alors que comme ça :
$tb = array('A', 'B', 'C');
php va analyser : "je déclare la variable $tb, à laquelle j'affecte un tableau, ce tableau contient les chaines "A", "B" et "C". ... au final ca revient au même (tant que tu n'as pas de constante qui s'appelle A) mais c'est quand même plus propre
Par ailleurs pour rendre ton code plus lisible, n'hésite pas à utiliser des apostrophes dans tes guillemets et inversement, et surtout, n'en mets pas autour des éléments qui ne sont pas des chaines :
$sql = "SELECT * FROM ". $table ." WHERE UPPER(LEFT(nom, 1)) IN ('A', 'B', 'C') ORDER BY nom" ;
Si tu en mets autour de "nom", la fonction LEFT va te retourner la première lettre de la chaine "NOM", c'est à dire "N" et pas la première de la valeur contenue dans la colonne nom
