Créer une table MySQL avec PHP
Apprenez à créer une table MySQL avec PHP en utilisant mysqli et PDO. Syntaxe CREATE TABLE, types de données, clés primaires et erreurs courantes.
Une table est l'endroit où MySQL stocke réellement vos lignes de données. Avant d'insérer des utilisateurs, des produits ou des articles, la table qui les contient doit exister, avec un ensemble défini de colonnes et le type de données de chaque colonne. Cette page montre comment créer une table MySQL depuis PHP en utilisant les extensions mysqli et PDO, explique la syntaxe CREATE TABLE pièce par pièce, et couvre les erreurs les plus courantes.
Si vous n'avez pas encore créé la base de données dans laquelle la table sera placée, faites-le d'abord — voir Créer une base de données MySQL. Pour un aperçu plus approfondi de la connexion elle-même, voir Se connecter à MySQL avec PHP.
Comment fonctionne la création d'une table
Depuis PHP, créer une table se déroule toujours en trois étapes :
- Se connecter au serveur MySQL et sélectionner une base de données. Une table doit appartenir à une base de données, donc la connexion doit savoir laquelle utiliser.
- Construire l'instruction SQL
CREATE TABLEsous forme de chaîne de caractères. Il s'agit de SQL pur — PHP se contente de le transmettre au serveur. - Exécuter l'instruction avec
mysqli_query()(mysqli) ou$pdo->exec()(PDO) et vérifier si elle a réussi.
L'erreur la plus courante chez les débutants est de se connecter sans nommer une base de données. CREATE TABLE échoue alors avec "No database selected" car le serveur n'a nulle part où placer la table. Les exemples ci-dessous passent toujours le nom de la base de données pour éviter ce problème.
Se connecter et sélectionner une base de données
mysqli_connect() prend le nom du serveur, le nom d'utilisateur et le mot de passe — et, chose importante, un quatrième argument facultatif : le nom de la base de données. Passez-le pour que la nouvelle table ait un emplacement.
<?php
$server = "localhost";
$username = "username";
$password = "password";
$database = "my_app"; // the database the table will be created in
$conn = mysqli_connect($server, $username, $password, $database);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>Si vous créez la base de données dans le même script, appelez mysqli_select_db($conn, "my_app") après l'avoir créée, ou reconnectez-vous avec le nom de la base de données comme quatrième argument avant d'exécuter CREATE TABLE.
Créer une table avec mysqli
Une fois la connexion établie avec une base de données sélectionnée, exécutez l'instruction CREATE TABLE avec mysqli_query(). Elle renvoie true en cas de succès et false en cas d'échec, donc vérifiez toujours le résultat et affichez mysqli_error() en cas d'échec — ce message vous indique exactement ce qui s'est passé.
L'exemple suivant crée une table users avec trois colonnes : id, name et email.
<?php
$sql = "CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
if (mysqli_query($conn, $sql)) {
echo "Table created successfully";
} else {
echo "Error creating table: " . mysqli_error($conn);
}
?>Ce que signifie chaque partie de l'instruction
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY— un entier qui ne peut jamais être négatif (UNSIGNED), qui s'incrémente automatiquement d'une unité à chaque nouvelle ligne (AUTO_INCREMENT), et qui identifie chaque ligne de manière unique (PRIMARY KEY). Presque toutes les tables ont une colonne de ce type.name VARCHAR(30) NOT NULL— une chaîne de longueur variable jusqu'à 30 caractères.NOT NULLsignifie qu'une valeur est obligatoire ; une insertion sans nom sera rejetée.email VARCHAR(50) NOT NULL UNIQUE— une chaîne obligatoire avec une contrainteUNIQUE, de sorte que MySQL refuse de stocker deux lignes avec le même email.
Types de données de colonnes courants
| Type | Utilisation | Exemple |
|---|---|---|
INT | Nombres entiers, identifiants, compteurs | views INT |
VARCHAR(n) | Texte court jusqu'à n caractères | name VARCHAR(50) |
TEXT | Texte long (articles, commentaires) | body TEXT |
DECIMAL(p,s) | Décimaux exacts comme les prix | price DECIMAL(8,2) |
DATE / DATETIME | Dates et horodatages | created_at DATETIME |
BOOLEAN | Indicateurs vrai/faux | active BOOLEAN |
Créer une table avec PDO
PDO est l'API plus moderne et portable, préférée pour les nouveaux projets. Le SQL est identique — seul l'enveloppeur PHP change. Avec PDO en mode exception, vous enveloppez l'appel dans un try/catch plutôt que de vérifier une valeur de retour.
<?php
$dsn = "mysql:host=localhost;dbname=my_app";
try {
$pdo = new PDO($dsn, "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
$pdo->exec($sql);
echo "Table created successfully";
} catch (PDOException $e) {
echo "Error creating table: " . $e->getMessage();
}
?>Éviter l'erreur "table already exists"
Si vous exécutez une instruction CREATE TABLE deux fois, la deuxième exécution échoue avec "Table 'users' already exists". Ajoutez IF NOT EXISTS pour rendre l'instruction sûre à ré-exécuter — MySQL ignore simplement la création lorsque la table est déjà présente.
<?php
$sql = "CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
)";
mysqli_query($conn, $sql);
?>Erreurs courantes et corrections
- "No database selected" — vous vous êtes connecté sans spécifier une base de données. Passez-la comme quatrième argument à
mysqli_connect()ou utilisezmysqli_select_db(). - "Table 'users' already exists" — utilisez
CREATE TABLE IF NOT EXISTS, ou supprimez d'abord l'ancienne table. - "You have an error in your SQL syntax" — généralement une virgule parasite après la dernière colonne, ou un mot réservé comme
orderutilisé comme nom de colonne sans accents graves. Encadrez ces noms avec des accents graves :`order`. - "Access denied for user" — le compte MySQL ne dispose pas des privilèges
CREATEsur cette base de données.
Prochaines étapes
Maintenant que la table existe, vous pouvez commencer à travailler avec les données qu'elle contient :
- Insérer des données dans une table MySQL
- Sélectionner des données depuis une table MySQL
- Utiliser des instructions préparées pour insérer des données utilisateur en toute sécurité
- Aperçu de l'extension mysqli
Résumé
Créer une table depuis PHP se résume à se connecter avec une base de données sélectionnée, écrire une instruction CREATE TABLE qui définit chaque colonne et son type, et l'exécuter avec mysqli_query() ou PDO::exec(). Vérifiez toujours les erreurs, ajoutez IF NOT EXISTS pour les scripts que vous pourriez ré-exécuter, et choisissez un type de données sensé pour chaque colonne afin que MySQL stocke vos données de manière efficace et sûre.