Php is not going to promote some MySql functions in upcoming days.
There is some examples about cleaning deprecated functions in PHP manual. But for example; when i replace mysql_query
with mysqli_query
in code below doesn't work. Also Notepad++ treats them like functions which is defined by myself. All examples are using OOP in PHP manual. I need an example without using object orianted programing.
Can someone tell me that how can i clean my code from deprecated mysql functions?
function db_connect_select()
{
$connection = @mysql_connect(MYSQL_HOSTNAME, USERNAME_SELECT, PASSWORD);
if (!$connection)
{
return false;
}
if (!mysql_select_db(DATABASE))
{
return false;
}
mysql_query("SET NAMES UTF8");
return $connection;
}
function db_result_to_array($result)
{
$res_array = array();
for ($count = 0; $row = mysql_fetch_array($result); $count++)
{
$res_array[$count] = $row;
}
return $res_array;
}
function select_top_tags()
{
$connection = db_connect_select();
$query = 'SELECT * FROM top_tags ORDER BY tag_name ASC';
$result = db_result_to_array(mysql_query($query));
if(mysql_ping($connection))
{
mysql_close($connection);
}
return $result;
}
It will just make no sense.
A mere mechanical replacement will do no good.
You have to understand that it is not old functions themselves, but old ways of using them is discouraged.
So, if you want to keep your current code as is - just keep it.
A red box in the manual is not that scary, and the version in which these functions are actually would raise a deprecated-level error is not out yet.
So, you have a 3-4 years ahead, before you will encounter whatever inconvenience. And even then to turn off deprecated-level errors is a matter of one runtime setting.
But if you want to write the better code - you have to use OOP way with PDO (and I can assure you that OOP is not that scaring. Although it require some knowledge when writing, it is very easy to use a ready made class. The only difference from familiar functions is a little ->
thing. Not a big deal)
So, here you go:
function db_connect_select()
{
$dsn = 'mysql:host='.MYSQL_HOSTNAME.';dbname='.DATABASE.';charset=utf8';
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
return new PDO($dsn,USERNAME_SELECT, PASSWORD, $opt);
}
function db_result_to_array($query,)
{
// not needed with PDO
}
function select_top_tags()
{
global $pdo;
$query = 'SELECT * FROM top_tags ORDER BY tag_name ASC';
$stm = $pdo->prepare($query);
$stm->execute();
return $stm->fetchAll();
}
usage:
$pdo = db_connect_select(); // somewhere in a bootstrap file
$tags = select_top_tags();
mysqli_*
functions are not drop-in replacement for mysql_*
functions. They are used in different way and simple replacement will not work. There are many tutorials on the Internet describing how to use mysqli_*
functions in PHP, e.g. this one.
I think you should carefully read the manual section on migrating because it specifically talks about the (minor) differences between both extensions.
Some examples:
// no select_db, give db to _connect call
$connection = @mysqli_connect(MYSQL_HOSTNAME,USERNAME_SELECT,PASSWORD,DATABASE);
// need to give the connection parameter to mysqli_query
mysqli_query($connection,"SET NAMES UTF8");
and so on
As others already said, this procedural interface is mostly offered for convenience and to ease the transition. You should at the same time invest some time in mastering the more modern concepts used in the newer db interfaces - I'd strongly suggest you have a look at PDO, presently by far the best database API for PHP.