使用未知密钥通过PHP将关联数组插入MySQL

时间:2015-04-18 18:34:59

标签: php mysql arrays json

从JSON对象解码我想通过PHP向MySQL插入一个关联数组。

我发现了几个例子 https://www.daniweb.com/web-development/php/threads/381669/json-to-mysql-with-php 处理这样的一次性导入 - 也使用未知密钥。

但是在我的情况下,我需要一次又一次地插入(从这个关联数组)到同一个表(不先删除并重新创建这个表),并且可能会在数组中随时出现新的键,这些键也需要反映出来作为MySQL表中的新列(全部定义为“varchar(255)”)。

所以基本上在插入之前,需要检查现有列,并在需要时补充新列。

我现在搜索了一段时间,但没有发现任何人之前做过同样的事情,只是不相信我是第一个需要这个的人。 : - )

有没有人知道这个巧合的例子?

提前致谢!

2 个答案:

答案 0 :(得分:3)

应该有一个information_schema数据库,其中包含该表中每个字段的表名,字段名和序号位置。

  1. 您可以按如下方式查询此数据库:

     $sql = "select column_name, data_type from information_schema.columns
             where table_name = '$table_name' ORDER BY ordinal_position";
    

    注意:我还查询data_type,因为它在这些操作中很有用。

  2. 将此信息保存到数组中。 (这是你的主人)

  3. 在遍历master(内部循环)中的每个元素时迭代关联数组(外部循环)。你内心没有找到的任何你内心的钥匙都会被添加到表格中。

  4. 向表中添加任何新列(有大量示例sql statements for adding columns)。

  5. 重新查询#1以获得新的主人。

  6. 接下来,在遍历原始关联数组(内部循环)的同时迭代主(外部循环)。当字段名称匹配时,将字段名称和值添加到新数组中(您还可以使用两个字符串:$ fields和$ values)。

  7. 新数组(或多个字符串)现在将以正确的顺序包含所有字段/值,您可以使用它来构建插入SQL语句。

    INSERT INTO table_name (column1, column2, column3,...)
    VALUES (value1, value2, value3,...) 
    

答案 1 :(得分:0)

将数据从关联数组插入MySQl请按照以下步骤操作。

第1步: 删除那些不是表格列的元素。例如,从POST数组中删除提交按钮值。

unset($_POST['submit']);

如果要将任何其他列的值添加到表中,可以将其添加到数组中。如果要保存客户端IP地址,请使用

$_POST['customer_ip'] = $_SERVER['REMOTE_ADDR'];

第2步: $query = "INSERT INTO table_name SET ";

foreach($_POST as $column => $column_value) {
    $query .= $column." = '".$column_value."'";
}

$查询内容以执行所需的SQL查询。

mysqli_query($query);