我知道这个主题非常常见,但我卡住了,找不到错误。
我在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选项,它只会以另一种方式执行,我的键开始在它的末尾有奇怪的值。 任何想法,再次抱歉可能是一个重复的问题。我可以访问数据库因为它没有给我任何错误,但是我很怀疑:(。
答案 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