Categories: Just Sayin'

The mysql_result in mysqli

Many of you have run into a problem when you were working on some old legacy php script that you wanted to adapt to PHP 7 where mysql_ functions no longer work (since they are deprecated).

The new PHP 7 comes with two database drivers: MySQLi and PDO. The PDO supports many different databases while MySQLi supports only MySQL.

So you probably thought, I’m just going to replace all mysql_ functions with mysqli_ and it’s done. Well, I’ve got bad news for you. It won’t! Also this way is also not safe. So take your time and learn about the changes and how you can overcome them.

One of the issues I found is that sometimes I just need to get a simple entry from the database: like a name, or email or some count of items, and before I could get away with something like this:

$new_car_count = mysql_result(mysql_query("SELECT COUNT('new') AS count FROM cars"), 0);

or like this:

$email = mysql_result(mysql_query(“SELECT email FROM users WHERE id=123”), 0);

So in a one line of code, I could grab a simple piece of information from the database. Some may argue that this doesn’t look very nice, but let’s leave that aside, for now.

In PHP 7 it seems that this is no longer possible. One of the solutions I found is this:

function mysqli_result($res,$row=0,$col=0){ 
    $numrows = mysqli_num_rows($res); 
    if ($numrows && $row <= ($numrows-1) && $row >=0){
        mysqli_data_seek($res,$row);
        $resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
        if (isset($resrow[$col])){
            return $resrow[$col];
        }
    }
    return false;
}

So, declaring the function with this name that will handle the job. Now I could just replace mysql_result with mysqli_result and everything will work.

But I what if don’t want to use that function. What re are the alternatives? Is there something already built in that I could just use.

This is what I have come up with:

$new_car_count = mysqli_fetch_assoc(mysqli_query($con, "SELECT COUNT('new') AS count FROM cars"))['count'];

or the other example

$email = mysqli_fetch_assoc(mysqli_query($con, "SELECT email FROM users WHERE id=123"))['email'];

Now I know many will argue that this is not that readable, but in case you need a quick fix for some of your legacy code to hold the water until you rewrite everything properly, this might just work.

Share
Published by
Nick

Recent Posts

How to Manage Storage on Smartphone: 12 Ways

Can't download new apps to your phone because there isn't enough storage space? Lack of…

10 months ago

Spotlight Search won’t open the files it finds in Dropbox with associated application

This issue started to appear on macOS 13 Ventura after recent Dropbox update. I would…

1 year ago

Windows 10 Search fix

Since this morning (Feb 5th 2020) search just stopped working on my Windows 10 (version…

4 years ago

How to convert physical Windows PC into a virtual machine

After 10 years of running my main desktop computer on Windows 7 - time has…

4 years ago

How to downgrade PHP 7.4 to PHP 7.3 on VestaCP running on CentOS 7

I installed VestaCP for a clien on a new dedicated server running CentOS 7. Once…

5 years ago

How to fix multi-line editing “Control + Shift + L” not working in Sublime

I use Sublime Text on both Windows and Mac and I love it. Recently I…

5 years ago