将数据从数组插入到DB

时间:2014-03-20 12:28:42

标签: php mysql

我知道这个主题非常常见,但我卡住了,找不到错误。

我在PHP中创建了一个数组:

$dataarray=array("FECHAS" => date("Y-m-d"),"HORAS" => date("H:i:s"),
             "RGD" => 0,"RGA" => 0,"FLU" => 0,"DD2" => 0,
             "H2O" => 0,"PRES:U" => 0,"U" => 0,"V" => 0,"TS" => 0,
             "T1" => 0,"T2" => 0,"H1" => 0,"H2" => 0, "HS" => 0,
             "VV1" => 0,"VV2" => 0);

我在MYSQL中有一个同名的表,但是当我尝试将数据放入其中时,它什么也没做。

for($j=0;$j<$variable_para_base;$j++)
{
    $keys;
    $vars;
foreach($dataarray[$j] as $k=>$v)
{
    $keys.= $k.',';
    $vars.= $v.",";
}
echo $keys."<br>";
echo $vars."<br>";
mysqli_query($mysqli,'INSERT INTO ff ( .$keys.) VALUES ( .vars. ) ') or die(mysql_error());

unset($keys);
unset($vars);
}

如果我使用die选项,它只会以另一种方式执行,我的键开始在它的末尾有奇怪的值。 任何想法,再次抱歉可能是一个重复的问题。我可以访问数据库因为它没有给我任何错误,但是我很怀疑:(。

4 个答案:

答案 0 :(得分:1)

您的查询中包含语法promlems。

INSERT INTO ff ( .$keys.) VALUES ( .vars. ) ' 将其更改为

INSERT INTO ff ( '.$keys.') VALUES ( '.$vars.') '

此外,您需要将'添加到作为VALUES插入的变量。

像那样: $vars.= "'".$v."',";

此外,您的上一个变量也以,结尾,它不应该是。

答案 1 :(得分:0)

你不能直接将数组插入mysql,因为mysql不了解php数据类型。 Mysql只能理解SQL。因此,要将此数组插入mysql数据库,您必须将其转换为sql语句。这可以手动完成,也可以通过库完成。输出应该是INSERT语句。

这是一个标准的mysql插入语句。

INSERT INTO TABLE1(COLUMN1, COLUMN2, ....) VALUES (VALUE1, VALUE2..)

如果你有一个名为fbdata的表格,其中的列显示在数组的键中,你可以使用这个小片段插入。以下是将数组转换为此语句的方式。

$columns = implode(", ",array_keys($insData));
$escaped_values = array_map('mysql_real_escape_string', array_values($insData));
$values  = implode(", ", $escaped_values);
$sql = "INSERT INTO `fbdata`($columns) VALUES ($values)";

答案 2 :(得分:0)

你在查询中有错误试试这个,

mysqli_query($mysqli,'INSERT INTO ff (' .$keys. ') VALUES (' .$vars. ') ') or die(mysql_error());

答案 3 :(得分:0)

所以你的最终结果可能是这样的:

<?
for($j=0;$j<$variable_para_base;$j++)
{
    $keys = array();
    $vars = array();
    foreach($dataarray[$j] as $k=>$v)
    {
        $keys[] = $k;
        $vars[] = $v;
    }

    $placeholders = array_fill(0, count($keys), '?'); //used to fill a number of '?' needed to fill later

    //here we use the '?' array to be placeholders for the values
    $query = "INSERT INTO ff (".implode(', ', $keys).") VALUES (".implode(', ', $placeholders).")"; //implode the arrays and separate by comma

    $statement = $mysqli->prepare($query); 

    $types  = array(str_repeat('s', count($vars))); //get the number of parameters and put the 's' to it (used for string values)
    $values = array_merge($types, $vars); //merge the arrays (gets you {'s', $value})

    call_user_func_array(array($statement, 'bind_param'), $values); //bind the values to the statement 

    $result = $statement->execute(); //execute.

    if($result) {
        print "Array inserted, worked like a charm.";
    }
    else {
        print "I failed, sorry...". $mysqli->error();
    }

    unset($keys);
    unset($vars);
}
$statement->close();
?>

然而,这是未经测试的,所以测试它很好。

您可以使用的参考资料:

Stackoverflow question: PHP - MySQL prepared statement to INSERT an array

Stackoverflow question: Best way to INSERT many values in mysqli

Stackoverflow question: Mysqli insert command