mattbit / mysql-compat
Backward compatibility for old mysql_* functions with PDO
Installs: 47 944
Dependents: 0
Suggesters: 0
Security: 0
Stars: 25
Watchers: 4
Forks: 6
Open Issues: 0
Requires
- php: >=5.6
- ext-pdo: *
Requires (Dev)
- phpspec/phpspec: ^2.5
- phpunit/phpunit: ^5.3
README
This library tries to provide backward compatibility with the deprecated mysql_*
functions.
Caveat
You really should not use this unless strictly needed: it's much better to refactor the existing code to use PDO
and prepared statements directly or an ORM like Eloquent.
Although library provides an hackish replacement for mysql_real_escape_string
, you ought to refactor your code to use prepared statements.
Requirements
PHP >= 5.6
with the PDO
driver is required (PHP 7
is supported).
Installation
You can install mysql-compat
via composer:
composer require mattbit/mysql-compat
Usage
The mysql_
-equivalent functions are available through the facade class Mattbit\MysqlCompat\Mysql
.
require __DIR__ . '/vendor/autoload.php'; use Mattbit\MysqlCompat\Mysql; Mysql::connect('host', 'user', 'password'); Mysql::selectDb('my_db'); $result = Mysql::query('SELECT * FROM my_table'); $row = Mysql::fetchArray($result);
Note that the static methods are named in a camel-case like version of the original functions, e.g. mysql_fetch_array
becomes Mysql::fetchArray
.
If you are using PHP7 and want to re-define the old global functions and constants without touching existing code, you can use the Mysql::defineGlobals
method:
require __DIR__ . '/vendor/autoload.php'; Mattbit\MysqlCompat\Mysql::defineGlobals(); mysql_connect('host', 'user', 'password'); mysql_select_db('my_db'); $result = mysql_query('SELECT * FROM my_table'); $row = mysql_fetch_array($result, MYSQL_BOTH);
If you need more control over the connections, the database manager allows you to access the underlying objects.
require __DIR__ . '/vendor/autoload.php'; use Mattbit\MysqlCompat\Mysql; $manager = Mysql::getManager(); // Create a connection by specifying a custom DSN. $connection = $manager->connect('mysql:dbname=mydatabase;host=myhost', 'user', 'pass'); // You can access the underlying PDO object $pdo = $connection->getPdo(); // The rest of the code will use the last connection registered in the manager $res = Mysql::query('SELECT * FROM my_table'); // But you can specify explicitly a connection as well $res = Mysql::query('SELECT * FROM my_table', $connection);
This is particularly useful if you need to customize connection's DSN (e.g. to specify the charset):
$manager = Mysql::getManager(); $manager->connect('mysql:dbname=database;host=hostname;charset=customCharset', 'user', 'password'); // This will automatically use the connection above, with the right charset. $res = Mysql::query('SELECT * FROM my_table');
To do
-
mysql_affected_rows
-
mysql_client_encoding
-
mysql_close
-
mysql_connect
-
mysql_create_db
-
mysql_data_seek(not supported) -
mysql_db_name
-
mysql_db_query
-
mysql_drop_db
-
mysql_errno
-
mysql_error
-
mysql_escape_string
-
mysql_fetch_array
-
mysql_fetch_assoc
-
mysql_fetch_field
-
mysql_fetch_lengths
-
mysql_fetch_object
-
mysql_fetch_row
-
mysql_field_flags
-
mysql_field_len
-
mysql_field_name
-
mysql_field_seek
-
mysql_field_table
-
mysql_field_type
-
mysql_free_result
-
mysql_get_client_info
-
mysql_get_host_info
-
mysql_get_proto_info
-
mysql_get_server_info
-
mysql_info
-
mysql_insert_id
-
mysql_list_dbs
-
mysql_list_fields
-
mysql_list_processes
-
mysql_list_tables
-
mysql_num_fields
-
mysql_num_rows
-
mysql_pconnect
-
mysql_ping
-
mysql_query
-
mysql_real_escape_string
-
mysql_result
-
mysql_select_db
-
(see issue #7 for information)mysql_set_charset
-
mysql_stat
-
mysql_tablename
-
mysql_thread_id
-
mysql_unbuffered_query