DEV Community

Cover image for Using php7-mysql-shim to Address `mysql_*` Function Compatibility in PHP 7
Akshay Joshi
Akshay Joshi

Posted on

Using php7-mysql-shim to Address `mysql_*` Function Compatibility in PHP 7

Introduction

As of PHP 7, the mysql_* functions have been removed. Applications that still use these functions need to be updated or face compatibility issues. One solution is to use php7-mysql-shim, a library that provides a compatibility layer allowing the use of mysql_* functions in PHP 7 by mapping them to their mysqli_* equivalents.

What is php7-mysql-shim?

php7-mysql-shim is a PHP library designed to provide a drop-in replacement for the deprecated mysql_* functions. This allows legacy applications to run on PHP 7 and newer versions without requiring a complete rewrite of database interactions.

Benefits of Using php7-mysql-shim

  1. Seamless Transition: Allows legacy applications to run on modern PHP versions without extensive refactoring.
  2. Minimal Changes: Requires only the inclusion of the shim library, leaving existing codebase largely untouched.
  3. Cost-Effective: Saves time and resources that would otherwise be spent on rewriting code to use mysqli or PDO.

Installation

You can install php7-mysql-shim via Composer, a dependency manager for PHP.

Step-by-Step Installation

  1. Install Composer:
    If you don't already have Composer installed, you can install it by following the instructions at getcomposer.org.

  2. Require php7-mysql-shim:
    Navigate to your project directory and run the following command to add php7-mysql-shim to your project:

   composer require dshafik/php7-mysql-shim
Enter fullscreen mode Exit fullscreen mode
  1. Include the Shim in Your Code: Add the following line at the beginning of your PHP scripts, ideally in a configuration file that is included in all your scripts:
   require 'vendor/autoload.php';
Enter fullscreen mode Exit fullscreen mode

Example Usage

Original Code Using mysql_* Functions

Here’s an example of legacy code using mysql_* functions:

// config.php
$db_host = 'localhost';
$db_user = 'root';
$db_password = '';
$db_name = 'test';

// Establish connection
$connection = mysql_connect($db_host, $db_user, $db_password);
if (!$connection) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db($db_name, $connection);
Enter fullscreen mode Exit fullscreen mode
// check_user.php
include_once('config.php');

$query = "SELECT * FROM users WHERE username = 'example_user'";
$result = mysql_query($query, $connection);

if (!$result) {
    die('Query failed: ' . mysql_error());
}

if (mysql_num_rows($result) > 0) {
    echo "User exists.";
} else {
    echo "User does not exist.";
}

mysql_close($connection);
Enter fullscreen mode Exit fullscreen mode

Modified Code with php7-mysql-shim

After installing php7-mysql-shim, you only need to include the autoload file:

// config.php
require 'vendor/autoload.php';

$db_host = 'localhost';
$db_user = 'root';
$db_password = '';
$db_name = 'test';

// Establish connection
$connection = mysql_connect($db_host, $db_user, $db_password);
if (!$connection) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db($db_name, $connection);
Enter fullscreen mode Exit fullscreen mode
// check_user.php
include_once('config.php');

$query = "SELECT * FROM users WHERE username = 'example_user'";
$result = mysql_query($query, $connection);

if (!$result) {
    die('Query failed: ' . mysql_error());
}

if (mysql_num_rows($result) > 0) {
    echo "User exists.";
} else {
    echo "User does not exist.";
}

mysql_close($connection);
Enter fullscreen mode Exit fullscreen mode

Error Handling

php7-mysql-shim aims to provide full compatibility with the mysql_* functions, including error handling and other nuances. Ensure your existing error handling code remains effective without modification.

Conclusion

php7-mysql-shim provides a straightforward and effective solution for running legacy PHP applications that use mysql_* functions on PHP 7 and newer versions. By installing the shim and including it in your project, you can avoid extensive rewrites and ensure compatibility with modern PHP versions, allowing for a smooth transition and continued application functionality.

Top comments (0)