Create DB

Last updated on

If you are working with PHP and MySQL, one of the first tasks you may need is to create a DB (Database) to store and manage your data.

In this tutorial, I will explain everything you need to know about creating a MySQL database, covering it with examples in PDO and MySQLi.

Create a MySQL Database (DB) Using MySQLi in PHP

A database is something like a container where your application data will be stored. You will see tables, rows, and other functions. Every one of them has its task like in tables we can store records or fetch results.

So when you decide to create a database you will follow the below process:-

  • A database might be called school.
  • A table in the database might be named students.
  • Each record in the students table will represent one student's data.

In the following sections, you will learn:

  1. How to set up a connection to MySQL.
  2. Execute SQL commands to create a database.
  3. Verify the database by SQL command.

Create a Connection to MySQL

The first step is to connect PHP to your MySQL server which requires you to use the mysqli_connect() function or the new mysqli() object for this purpose. Here is an example:

// Database credentials
$servername = "localhost";
$username = "root";
$password = "";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

Create a Database

Once the connection is established, you can create a database using an SQL query. Here is how:

// SQL to create a database
$sql = "CREATE DATABASE school";

// Execute the query
if ($conn->query($sql) === TRUE) {
    echo "Database created successfully";
} else {
    echo "Error creating database: " . $conn->error;
}

// Close the connection
$conn->close();

Verify Database Creation

To ensure that the database was created, log into your MySQL server and run:

SHOW DATABASES;

You should see school listed in the output.

We can handle errors using connect_error in MySQLi. This helps us to know what the error is. Here is an example:

// Database credentials
$servername = "localhost";
$username = "root";
$password = "";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// SQL to create a database
$sql = "CREATE DATABASE school";
if ($conn->query($sql) === TRUE) {
    echo "Database created successfully";
} else {
    // Custom error message
    echo "Failed to create database. Error: " . $conn->error;
}

// Close the connection
$conn->close();

In this example, you will know the reason if something is wrong during the database creation.

You can also achieve the same task with PDO. Let's move on to the following section to see how can we do that.

Create a Database Using PDO in PHP and MySQL

You can use PDO to create a database, and it is a great way to keep things secure. Whether you are starting from scratch or adding a database to an existing project.

Before diving into code, let us quickly understand what PDO is.

PDO is a PHP extension that helps you interact with databases. It is a rockstar because:

  • It supports multiple database systems (not just MySQL).
  • It has built-in tools for error handling.
  • It encourages better coding practices like using prepared statements (bye, SQL injection).

Connect to MySQL Using PDO

The first step you must to do, is to create a connection with the MySQL server. Here is an example:

try {
    // Connection details
    $dsn = "mysql:host=localhost";
    $username = "root";
    $password = "";

    // Create a new PDO instance
    $pdo = new PDO($dsn, $username, $password);

    //This is a setting for error mode to exceptions
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "Connected to MySQL successfully!";
} catch (PDOException $e) {
    // This handle connection errors
    echo "Connection failed: " . $e->getMessage();
}

The $dsn is like the GPS of your database - it tells PDO what type of database you're connecting to and where that database lives. When you call new PDO, that's actually when the connection gets initiated, so to speak. Now it gets really cool: this sets PDO::ERRMODE_EXCEPTION so that you get clear error messages if something goes wrong.

Use PDO to Create the Database

You can use an SQL CREATE DATABASE command to set up your database Once connected. Here is an example:

try {
    // Connection details
    $dsn = "mysql:host=localhost";
    $username = "root";
    $password = "";

    // Create a new PDO instance
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // SQL to create a database
    $sql = "CREATE DATABASE my_database";

    // Execute the SQL statement
    $pdo->exec($sql);

    echo "Database created successfully!";
} catch (PDOException $e) {
    // Handle errors during database creation
    echo "Error creating database: " . $e->getMessage();
}

But, if you want more control, you can specify the charset and collation to make your database compatible with your needs:

$sql = "CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci";

So when you do that, you ensure your database supports emojis, multilingual text, and more.

Anyway, let's move on to the following part, to see how we can create a dynamic database.

Dynamic Database Creation

Here is an example show you how to create a database based on user input:

try {
    $dsn = "mysql:host=localhost";
    $username = "root";
    $password = "";

    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Get the database name dynamically (e.g., from a form)
    $dbName = "user_database";

    // Validate the database name
    if (!preg_match('/^[a-zA-Z0-9_]+$/', $dbName)) {
        throw new Exception("Invalid database name.");
    }

    $sql = "CREATE DATABASE $dbName";
    $pdo->exec($sql);

    echo "Database '$dbName' created successfully!";
} catch (PDOException $e) {
    echo "Database error: " . $e->getMessage();
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

Note that in this step, you will have to validate the user input to avoid SQL injection and/or vulnerability to your database. Here is a simple example using regex /^[a-zA-Z0-9_]+$/ and help you validate that the given name is alphanumeric.

Wrapping Up

You'll have the capability to connect to your database, run SQL commands, and handle errors with either MySQLi or PDO. You will go from zero to a fully-implemented database that completes your application in a few steps.

Anyway, here is a quick recap:

  • To create a database using MySQLi use this code: $conn->query("CREATE DATABASE school"). But make sure you are already connected with that database.
  • Here is another way to create a database using PDO, just use this code:
 $pdo = new PDO($dsn, $username, $password);
 $pdo->exec("CREATE DATABASE my_database");

That's all, thank you for reading. Happy Coding.

Frequently Asked Questions (FAQs)

  • What is the best way to create a database in PHP using MySQL?

    You can create a database in PHP using either MySQLi or PDO. Both are secure and reliable. MySQLi is easy to use for MySQL-specific tasks, while PDO offers support for multiple database types. Here is an example of creating a database using MySQLi:
    $servername = "localhost";
    $username = "root";
    $password = "";
    
    // Create connection
    $conn = new mysqli($servername, $username, $password);
    
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    
    // SQL to create a database
    $sql = "CREATE DATABASE school";
    if ($conn->query($sql) === TRUE) {
        echo "Database created successfully";
    } else {
        echo "Error creating database: " . $conn->error;
    }
    
    $conn->close();
    
  • How can I handle database connection errors in PHP?

    To handle connection errors, you can use the connect_error property in MySQLi or exceptions in PDO. This ensures you know exactly what went wrong. Here is an example with MySQLi:
    $conn = new mysqli("localhost", "root", "");
    
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } else {
        echo "Connected successfully";
    }
    
    For PDO, you can catch errors like this:
    try {
        $pdo = new PDO("mysql:host=localhost", "root", "");
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully!";
    } catch (PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }
    
  • What is the difference between MySQLi and PDO?

    The key differences are:
    • MySQLi: Works only with MySQL databases. It is easy to use and suitable for most MySQL-specific tasks.
    • PDO: Supports multiple database systems like MySQL, PostgreSQL, and SQLite. It also has better error handling and supports prepared statements.
  • How do I validate user input when creating a dynamic database in PHP?

    Always validate user input to prevent SQL injection or invalid database names. You can use regular expressions for this. Here is an example in PDO:
    try {
        $dbName = "user_database";
    
        // Validate the database name
        if (!preg_match('/^[a-zA-Z0-9_]+$/', $dbName)) {
            throw new Exception("Invalid database name.");
        }
    
        $pdo = new PDO("mysql:host=localhost", "root", "");
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        $sql = "CREATE DATABASE $dbName";
        $pdo->exec($sql);
    
        echo "Database '$dbName' created successfully!";
    } catch (Exception $e) {
        echo "Error: " . $e->getMessage();
    }
    
  • Can I specify a character set and collation when creating a database?

    Yes, you can specify both to ensure your database supports the desired encoding. For example, to use utf8mb4:
    $sql = "CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci";
    
    $pdo->exec($sql);
    
  • How do I verify if a database has been created in MySQL?

    You can run the SHOW DATABASES command in MySQL to see a list of all available databases:
    SHOW DATABASES;
    
    If your database, like school, appears in the list, it means the creation was successful.
Share on: