Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert a PHP array to an SQL statment?

I'm trying to convert an array (key/value) to be an SQL statement.

I'm using MYSQLi like such:

if(!$result = $mysqli->query($sql)){throw new Exception("SQL Failed ".__file__." on line ".__line__.":\n".$sql);}

I have an array like such:

Array
(
[database] => Array
    (
        [cms_network] => Array
            (
                [network_id] => 61
                [network_name] =>
                [network_server_mac_address] => 00:1b:eb:21:38:f4
                [network_description] => network
                [network_thermostat_reporting_rate] => 5
                [network_server_reporting_rate] => 5
                [network_data_poll_rate] => 5
                [network_created_by] => 38
                [network_modified_by] => 1
                [network_network_id] => 8012
                [network_language] => en
                [network_hotel_id] => 68
                [network_channel] => 0
                [network_deleted] => 0
                [network_reported_network_id] => 8012
                [network_rooms] => 4
            )

    )

)

How can I convert [cms_network] to look like this:

$sql = "UPDATE cms_network set network_id='61', network_name='',      
network_server_mac_address = '00:1b:eb:21:38:f4', .... WHERE network_id='61'"

I'm more interested in knowing how to concatenate the key=>value pair of the array to be key='value' in my select statement.

Thanks for the help!

like image 773
Drace Avatar asked Feb 11 '26 03:02

Drace


1 Answers

If you use the VALUES syntax, you could do it in one fell swoop.

mysql_query("
UPDATE MyTable
( . implode(',', array_keys($array['database']['cms_network'])) . ")
VALUES ('" . implode("','", $array['database']['cms_network']) . "')
");

This, of course, assumes that the data is already escaped.

EDIT: Tidier version that's easier to read and maintain:

$fields = implode(',', array_keys($array['database']['cms_network']));
$values = implode("','", $array['database']['cms_network']);
mysql_query("UPDATE MyTable ($fields) VALUES ('$values')");
like image 120
Recovering Nerdaholic Avatar answered Feb 12 '26 21:02

Recovering Nerdaholic