W3docs

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 :

  1. 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.
  2. Construire l'instruction SQL CREATE TABLE sous forme de chaîne de caractères. Il s'agit de SQL pur — PHP se contente de le transmettre au serveur.
  3. 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";

?>
Info

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 NULL signifie qu'une valeur est obligatoire ; une insertion sans nom sera rejetée.
  • email VARCHAR(50) NOT NULL UNIQUE — une chaîne obligatoire avec une contrainte UNIQUE, de sorte que MySQL refuse de stocker deux lignes avec le même email.

Types de données de colonnes courants

TypeUtilisationExemple
INTNombres entiers, identifiants, compteursviews INT
VARCHAR(n)Texte court jusqu'à n caractèresname VARCHAR(50)
TEXTTexte long (articles, commentaires)body TEXT
DECIMAL(p,s)Décimaux exacts comme les prixprice DECIMAL(8,2)
DATE / DATETIMEDates et horodatagescreated_at DATETIME
BOOLEANIndicateurs vrai/fauxactive 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 utilisez mysqli_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 order utilisé 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 CREATE sur cette base de données.

Prochaines étapes

Maintenant que la table existe, vous pouvez commencer à travailler avec les données qu'elle contient :

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.

Pratique

Pratique
Quelles sont les étapes nécessaires pour créer une table MySQL en PHP ?
Quelles sont les étapes nécessaires pour créer une table MySQL en PHP ?
Was this page helpful?