What is mysqli used for?

MySQLi (MySQL Improved) provides procedural and object oriented interface to data and its management. The i extension MySQL functions allows the user to access its database servers. The MySQL improved extension is specially designed to work with MySQL version 4.1.13 and new versions.
Advantages of using prepared statements: 
 

  1. Prepared statements are highly efficient specially to avoid SQL injection attacks.
  2. The prepared statements are used repeatedly. It also reduces parsing time and overheads as the preparation of query is done only once.
  3. The database parses, compiles, optimizes the query statement and stores the result.
  4. Binding parameters with the query minimizes overall bandwidth as the parameters are sent whenever required, instead of sending the whole query.
  5. Binding parameters with placeholders are safer and easier as the proper formatting is automatically done.
  6. By sending the placeholder values to MySQL Server, it follows the client-server protocol.
  7. It executes a particular query statement multiple times with different set of variables effectively reducing the cost.
  8. It also saves on data copying and conversion.
  9. Prepared statements are less prone to errors as the statement is parsed at first and then the parsed values are used by the server.

We cannot cover everything under this topic, but let us look into some of the important procedural functions 
of MySQLi .
1. mysqli_connect(): 
As you know, before doing any database related operations, you need to establish a connection to the MySQL database server. If the connection is established successfully, then it returns a database connection resource identifier. If the connection encounters failure, then it just throws an error.
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

mysqli_connect($host, $dbuser, $dbpass, $dbname);

if(mysqli_connect_error())

{

 echo "Connection establishing failed!";

}

else

{

 echo "Connection established successfully.";

}

?>

Output: 
 

Connection established successfully. 

2. mysqli_connect_error(): 
The MySQLi function throws an error when the connection is not made successfully and the function stores the error in previous call to mysqli_connect(). If no error is encountered , it returns NULL. If any error is encountered , then it returns an error message.
Note: 
 

  • To test mysqli_connect_error(), stop the MySQL server in XAMPP control panel and then call the above PHP code having mysqli_connect(). 
     
  • If display_errors are enabled in PHP configuration, you can see an error of mysqli_connect_error() which returns the following message. 
     
Connection failed as the target machine actively refused it. 

Note: 
In good programming practice , its better NOT to show any error messages. For troubleshooting purpose, use mysqli_connect_error() to log the error as mentioned in the below code .
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

mysqli_connect($host, $dbuser, $dbpass, $dbname);

if(mysqli_connect_error())

{

 echo "Connection establishing failed!";

}

else

{

 echo "Connection established successfully.";

}

?>

3. mysqli_select_db(): 
This mySQLi function is used to change the default database for making a connection. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$dbtest = "GFG_TEST";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

 mysqli_select_db($conn,$dbtest);

mysqli_close($conn);

?>

Result: 
This will change the current database to GFG_TEST
4. mysqli_debug(): 
Every web developer needs to refer to log files to start troubleshooting for improving the application performance. The above mySQLi function is used in the code for all debugging purposes. 
 

php

<?php

mysqli_debug("d:t:o,/temp/client.trace");

?>

Note: 
The user should compile the MySQL client library to make use of the above function to support debugging. This function on success will return TRUE.
5. mysqli_close(): 
This MySQLi function is used to close a previously connected database. This function will return TRUE on successful closing, otherwise it will return FALSE. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

if(mysqli_close($conn))

echo "Connection closed successfully.";

?>

Output: 
 

Connection closed successfully. 

6. mysqli_prepare(): 
The above MySQLi function is used to prepare a MySQL query for execution. It returns a statement object for further operations and returns FALSE if some error occurs.
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = mysqli_prepare("INSERT INTO items_info (item_name, description)

                                VALUES (?, ?)");

$query->bind_param("ss", $itemname, $description);

$itemname = "Shampoo";

$description = "Hairfall preventing protein shampoo";

$query->execute();

echo "New record inserted successfully";

mysqli_close();

?>

Output: 
 

New record inserted successfully 

7. mysqli_query(): 
This MySQLi function performs or executes the query on the given database.
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

mysqli_query($conn,"INSERT INTO items_info (item_name, description)

                    VALUES ('Nailpolish', 'Colorbar Pink one')");

echo "Inserted successfully";

mysqli_close($conn);

?>

Output: 
 

Inserted successfully 

8. mysqli_rollback(): 
The mysqli function rollsback the current transaction for the given database connection. Turn OFF the auto-commit, execute the query, then again commit the query and then rollback the current 
transaction. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

mysqli_autocommit($conn,FALSE);

mysqli_query($conn,"INSERT INTO items_info (item_name, description)

                    VALUES ('Shoes', 'Adidas Brand')");

echo "Inserted successfully";

mysqli_commit($conn);

mysqli_rollback($conn);

mysqli_close($conn);

?>

9. mysqli_fetch_row(): 
The above MySQLi function is used to fetch one row from the result-set as an enumerated array. Each call to the above function will return the next row from the result set. If no rows are fetched, then it returns FALSE. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "SELECT item_name,description from items_info";

if ($result=mysqli_query($conn,$query))

{

  while ($row=mysqli_fetch_row($result))

    {

        echo " Item name :".$row[0]." , ";

        echo " Description : ".$row[1];

        echo  nl2br (" \n ");

    }

  mysqli_free_result($result);

}

mysqli_close($conn);

?>

Result: 
It will show all the rows with Item name , Description 
10. mysqli_field_count(): 
The above MySQLi function is used to return the number of columns for the most recent query. It returns total number of columns in the result set. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "SELECT * from items_info";

mysqli_query($conn,$query);

$total_columns = mysqli_field_count($conn);

echo $total_columns;

mysqli_close($conn);

?>

Output: 
 

4 

11. mysqli_fetch_array(): 
The above MySQLi function is used to fetch a row as an associative, numeric array or both types of array from the result set. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "SELECT item_name,description from items_info";

$result=mysqli_query($conn,$query);

$row=mysqli_fetch_array($result,MYSQLI_NUM);

echo " Item name :".$row[0];

echo ",";

echo " Description : ".$row[1];

echo  nl2br (" \n ");

$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

echo " Item name :".$row["item_name"];

echo ",";

echo " Description : ".$row["description"];

mysqli_free_result($result);

mysqli_close($conn);

?>

Output: 
 

table array 

12. mysqli_fetch_all(): 
The MySQLi function fetches all rows and return the result set as an associative array, a numeric array, or both. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "SELECT item_name from items_info";

$result = mysqli_query($conn,$query);

$rowcount=mysqli_num_rows($result);

$row = mysqli_fetch_all($result,MYSQLI_ASSOC);

print_r($row);

for($i=0;$i<$rowcount;$i++)

{

   echo "<br> ".$row[$i]['item_name'];

}

mysqli_free_result($result);

mysqli_close($conn);

?>

Note: The above function is only available with MySQL Native Driver.
13. mysqli_free_result(): 
The above MySQLi function free the memory of the fetched rows of the result set. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "SELECT item_name,description from items_info";

if ($result=mysqli_query($conn,$query))

{

    while ($row=mysqli_fetch_row($result))

    {

        echo " Item name :".$row[0].",";

        echo " Description : ".$row[1];

        echo  nl2br (" \n ");

    }

  mysqli_free_result($result);

}

mysqli_close($conn);

?>

Output: 
 

Item name :box, Description : square shaped box in red colour 

14. mysqli_num_rows(): 
The above MySQLi function is used to return the number of rows of the result set. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "SELECT item_name,description from items_info";

if ($result=mysqli_query($conn,$query))

{

  $rowcount=mysqli_num_rows($result);

  echo "Total number of rows of the result :  ".$rowcount;

  mysqli_free_result($result);

}

mysqli_close($conn);

?>

Output: 
 

Total number of rows of the result : 8 

15. mysqli_affected_rows(): 
The above MySQLi function is used to return the total number of affected rows from the previous MySQL SELECT, INSERT, UPDATE, DELETE or REPLACE query. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "SELECT * FROM items_info";

mysqli_query($conn,$query);

echo "Total affected rows : ".mysqli_affected_rows($conn);

mysqli_close($conn);

?>

Output: 
 

Total affected rows : 8 

16. mysqli_get_server_info(): 
The above MySQLi function is used to return the MySQL server version. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

echo "The MySQL server version is : ".mysqli_get_server_info($conn);

mysqli_close($conn);

?>

Output: 
 

The MySQL server version is : 5.6.21 

17. mysqli_fetch_fields(): 
The above MySQLi function returns an array of objects which contains the information of columns of the result set. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "SELECT item_name,description FROM items_info";

if ($result=mysqli_query($conn,$query))

  {

  $fields=mysqli_fetch_fields($result);

  foreach ($fields as $value)

    {

        echo "Column name : ".$value->name."<br> ";

    echo "Table name : ".$value->table."<br> ";

    echo "Maximum length : ".$value->max_length."<br> ";

    echo  nl2br (" \n ");

     }

  mysqli_free_result($result);

}

mysqli_close($conn);

?>

Output: 
 

Column name : item_name
Table name : items_info
Maximum length : 18

Column name : description
Table name : items_info
Maximum length : 35 

18. mysqli_error(): 
The MySQLi function returns the error message for the last MySQL function call, if any error exists. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

if (mysqli_connect_errno())

  {

  echo "Connection to MySQL server failed : " . mysqli_connect_error();

  }

$query = "INSERT INTO items_info (item_name) VALUES ('Jacket')";

if (!mysqli_query($conn,$query))

  {

  echo("Error occurred : " . mysqli_error($conn));

  }

?>

19. mysqli_autocommit(): 
This above MySQLi function is used in turning ON/OFF auto-committing database changes or operations. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

 $conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

 mysqli_autocommit($conn,FALSE);

mysqli_query($conn,"INSERT INTO items_info (item_name, description)

                    VALUES ('Clock', 'Wall clock for the living room')");

mysqli_commit($conn);

echo "Inserted successfully";

mysqli_close($conn);

?>

20. mysqli_error_list(): 
The MySQLi function returns list of error messages for the last MySQL function call, if any error exists. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

  if (mysqli_connect_errno())

  {

  echo "Connection to MySQL server failed : " . mysqli_connect_error();

  }

$query = "INSERT INTO items_info (item_name) VALUES ('Jacket')";

if (!mysqli_query($conn,$query))

  {

  print_r(mysqli_error_list($conn));

  }

?>

21. mysqli_begin_transaction(): 
The MySQLi function starts a transaction following the MySQL commands. It returns TRUE in case of successful execution, otherwise it returns FALSE. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$query = "INSERT INTO items_info (item_name, description)

          VALUES ('Bangles', 'Pink bangles')";

mysqli_begin_transaction($conn, MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT);

mysqli_query($conn,$query);

mysqli_commit($conn);

echo "Inserted successfully";

mysqli_close($conn);

?>

22. mysqli_change_user(): 
The MySQLi function is used to change the user of given database connection to the new database . 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$other_dbname = "OTHER_GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

mysqli_change_user($conn, $dbuser,$dbpass, $other_dbname);

if ($result = mysqli_query($conn,"SELECT database()"))

{

    $row = mysqli_fetch_row($result);

    echo "Default database : ".$row[0];

}

mysqli_close($conn);

?>

Output: 
 

Default database : OTHER_GFG 

23. mysqli_character_set_name(): 
The MySQLi function is used to return the default character set selected for the database connection . 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$characterset = mysqli_character_set_name($conn);

echo "Default character set is: " . $characterset;

mysqli_close($conn);

?>

Output: 
 

Default character set is: latin1 

24. mysqli_real_escape_string(): 
The MySQLi function is used to escape special characters in a string for use in MySQL queries. 
 

php

<?php

$host  = "localhost";

$dbuser = "root";

$dbpass = "";

$dbname = "GFG";

$conn = mysqli_connect($host, $dbuser, $dbpass, $dbname);

$itemname = "matress's";

$description = "Belongs to Mumbai's mall";

$itemname = mysqli_real_escape_string($conn,$itemname);

$description = mysqli_real_escape_string($conn, $description);

$query = "INSERT INTO items_info (item_name, description)

          VALUES ('$itemname','$description')";

if (!mysqli_query($conn,$query)) {

  die('Error: ' . mysqli_error($conn));

}

echo "One record added successfully";

mysqli_close($conn);

?>

Output: 
 

One record added successfully 

Why we use MySQLi instead of MySQL?

Reasons why you should use MySQLi extension instead of the MySQL extension are many: MySQLi gives you prepared statements - a safer way of sending data to MySQL and protecting you from SQL injection. This alone should be enough for always choosing MySQLi over MySQL. MySQLi enables most of the MySQL features.

What are the functions of MySQLi?

PHP MySQLi Functions.

Should I use MySQLi or MySQL?

MySQLi supports both procedural interfaces and object oriented interfaces while MySQL supports only procedural interfaces. MySQLi supports stored procedure but MySQL does not. There is enhanced security and improved debugging features in MySQLi where this is comparatively lagging in MySQL.

Is MySQLi faster than MySQL?

According to all the Google results for benchmarks linked by ceejayoz it looks like MySQL is at least slightly faster than MySQLi in all the benchmark tests.