将PHP数组转换为SQL语句?

时间:2014-02-05 00:49:11

标签: php mysql sql arrays mysqli

我正在尝试将数组(键/值)转换为SQL语句。

我正在使用MYSQLi:

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

我有一个像这样的数组:

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
            )

    )

)

如何将[cms_network]转换为如下所示:

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

我更感兴趣的是知道如何在我的select语句中将key=>value数组对连接成key='value'

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

我建议你使用格式化的键/值对填充数组,然后在最后将它们内爆。这是在每个键/值之间添加所需,的简便方法:

$fields = array();
foreach($array['database']['cms_network'] as $key => $value) {
    // add formatted key/value pair to fields array
    // e.g. format: network_id = '26'
    $fields[] = $key . " = '" . $value . "'";
}
$fields = implode(', ', $fields);
// build your query
$query = "UPDATE cms_network SET " . $fields . " WHERE network_id = " . $array['database']['cms_network']['network_id'] . " LIMIT 1";
// process it...

这将(SQL明智地)将每个值作为字符串插入,这显然是不正确的整数列等。它仍然应该工作,但如果不是,你将需要放入有关是否将值包装在引号中的条件语句like this

foreach(...) {
    if(is_numeric($value))
        $fields[] = $key . ' = ' . $value;
    else
        $fields[] = $key . " = '$value'";
}

虽然这可能与您的数据库列类型而不是PHP变量类型有关。由你决定,它们应该可以正常使用整数引号。

答案 1 :(得分:1)

这应该有用。

$update_query = "UPDATE `cms_network` SET ";
$count = 0;
foreach($array['database']['cms_network'] as $key => $value)    {
    if ($count != 0)    {
        $update_query = $update_query.",".$key."=".$value;
    }   else    {
        $update_query = $update_query.$key."=".$value;
    }
    $count++;
}
$update_query = $update_query." WHERE ".cms_network."=".$array['database']['cms_network'];
mysql_query($update_query);

答案 2 :(得分:0)

如果您使用VALUES语法,则可以一下子完成。

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

当然,这假设数据已经被转义。

编辑:更易于阅读和维护的Tidier版本:

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