数组进入mysql行

时间:2013-12-24 06:57:12

标签: php mysql arrays

您好我有一个动态表单,可以在用户选择时更改字段名称。我想将表单结果插入到一个mysql行中..我创建一个数组如下:

<?php

include_once 'dbconnect.php';

if (isset($_POST['item_name'])) {
        $table = $_POST['ItemTypeSelect'];

        foreach ($_POST as $key => $variable) {
            $chesckColumn = mysql_query("SELECT `$key` from $table");
            if (!$chesckColumn) {
                echo "column ".$key." does not exist <br/>";
            }else{
                $results = $variable;
                $columnName = $key;
                $array[] = array($columnName => $results);
            }
        }
                mysql_query("INSERT INTO $table (`$columnName`) VALUES ('$results') ")or die(mysql_error());

        }

?>

我的数组结果是

 (
    [0] => Array
        (
            [Server_id] => 
        )

    [1] => Array
        (
            [Server_IP_Address] => 12345
        )

    [2] => Array
        (
            [Server_IP] => 12345
        )

    [3] => Array
        (
            [Server_Name] => dad
        )

)

如何将数组插入一个表行并引用$ results和字段值以及$ columnName作为字段值。

2 个答案:

答案 0 :(得分:0)

你可以使用一些内置的php函数:

function put_quotes(&$item){
    $item = "'$item'";
}
$columns = implode(",",array_walk(array_keys($_POST),'put_quotes'));
$values = implode(",",array_walk(array_values($_POST),'put_quotes'));

mysql_query("INSERT INTO $table (columns) VALUES ($values) ")or die(mysql_error());

其中:

  • array_walk在所有数组上执行一个函数,此处在项目上添加引号。
  • array_keys从数组中获取密钥
  • array_values从数组中获取值
  • implode将数组连接到带分隔符的字符串

答案 1 :(得分:0)

使用 PDO ,因为 mysql _ * 功能已被删除。

连接 PDO 中的 MySQL

$db="database";
$host="127.0.0.1";
$usr="username";
$pass="password";
$dbh=new PDO("mysql:dbname=$db;host=$host", $usr, $pass);

首先将数组转换为 JSON 并将其保存在表格中:

$json=json_encode($array);
$sql=$dbh->prepare("INSERT INTO ? (?) VALUES (?)");
$sql->execute(array($table,$columnName,$json));

如果要返回数组,请解码从表中获取的 JSON 数据:

$sql=$dbh->prepare("SELECT ? FROM ?");
$sql->execute(array($columnName,$table));
while($r=$sql->fetch()){
 $array=json_decode($r[$columnName],true);
 print_r($array);
}