<?php
/**
 * Make mysql_connect work like mysqli_connect for future php versions.
 *
 * @author Ivor Barhansky
 * @version 0.2
 */

// Make sure the MySQL extension is not loaded and there is no other drop in replacement active
if (!extension_loaded('mysql') && !function_exists('mysql_connect')) {
    // Validate if the MySQLi extension is present
    if (!extension_loaded('mysqli')) {
        trigger_error('The extension "MySQLi" is not available', E_USER_ERROR);
    }

    // The function name "getLinkIdentifier" will be used to return a valid link_indentifier, make it is available
    if (function_exists('getLinkIdentifier')) {
        trigger_error('The function name "getLinkIdentifier" is already defined, please change the function name', E_USER_ERROR);
    }

    // Define MySQL constants
    define('MYSQL_CLIENT_COMPRESS', MYSQLI_CLIENT_COMPRESS);
    define('MYSQL_CLIENT_IGNORE_SPACE', MYSQLI_CLIENT_IGNORE_SPACE);
    define('MYSQL_CLIENT_INTERACTIVE', MYSQLI_CLIENT_INTERACTIVE);
    define('MYSQL_CLIENT_SSL', MYSQLI_CLIENT_SSL);

    define('MYSQL_ASSOC', MYSQLI_ASSOC);
    define('MYSQL_NUM', MYSQLI_NUM);
    define('MYSQL_BOTH', MYSQLI_BOTH);

    // Will contain the link identifier
    $link = null;

    /**
     * Get the link identifier
     *
     * @param mysqli $mysqli
     * @return mysqli|null
     */
    function getLinkIdentifier(mysqli $mysqli = null)
    {
        if (!$mysqli) {
            global $link;
            $mysqli = $link;
        }

        return $mysqli;
    }

    /**
     * Open a connection to a MySQL Server
     *
     * @param $server
     * @param $username
     * @param $password
     * @return mysqli|null
     * @deprecated
     */
    function mysql_connect($server, $username, $password, $new_link = false, $client_flags = 0)
    {
        global $link;

        $link = mysqli_connect($server, $username, $password);
        return $link;
    }

    /**
     * @param $databaseName
     * @return bool
     * @deprecated
     */
    function mysql_select_db($databaseName)
    {
        global $link;

        return mysqli_select_db($link, $databaseName);
    }

    /**
     * @param $query
     * @param mysqli $mysqli
     * @return bool|mysqli_result
     * @deprecated
     */
    function mysql_query($query, mysqli $mysqli = null)
    {
        return getLinkIdentifier($mysqli)->query($query);
    }

    /**
     * @param $string
     * @param mysqli $mysqli
     * @return string
     * @deprecated
     */
    function mysql_real_escape_string($string, mysqli $mysqli = null)
    {
        return getLinkIdentifier($mysqli)->escape_string($string);
    }

    /**
     * @param mysqli_result $result
     * @return bool|array
     * @deprecated
     */
    function mysql_fetch_assoc(mysqli_result $result)
    {
        $result = $result->fetch_assoc();
        if ($result === null) {
            $result = false;
        }

        return $result;
    }

    /**
     * @param mysqli_result $result
     * @return bool|int
     * @deprecated
     */
    function mysql_num_rows(mysqli_result $result)
    {
        $result = $result->num_rows;
        if ($result === null) {
            $result = false;
        }

        return $result;
    }

    /**
     * @param mysqli_result $result
     * @param $result_type
     * @return void
     * @deprecated
     */
    function mysql_fetch_array(mysqli_result $result, $result_type = MYSQL_BOTH)
    {
        return mysqli_fetch_array($result, $result_type);
    }

    /**
     * Get the ID generated in the last query
     *
     * @param null $mysqli
     * @return int|string
     * @deprecated
     */
    function mysql_insert_id(mysqli $mysqli = null)
    {
        return mysqli_insert_id(getLinkIdentifier($mysqli));
    }

}