我正在尝试将包含8个字段的POST数组插入到8列的mysql表中,但在提交表单时出现此错误:
错误:列数与第1行的值计数不匹配
当我搜索此错误时,表示传递的数据不适合数据库表的列数,但该表有8列。我做错了什么?
这是我的代码:
<html>
<body>
<form action="" method="post">
Nombre: <input type="text" name="data[]">
Apellido: <input type="text" name="data[]"></br>
Direccion: <input type="text" name="data[]"></br>
Telefono: <input type="text" name="data[]">
Telefono 2: <input type="text" name="data[]"></br>
Email: <input type="text" name="data[]"></br>
Edad: <input type="text" name="data[]"></br>
Foto: <input type="text" name="data[]">
<input type="submit">
</form>
<?php
$con=mysql_connect("localhost","root","");
if (!$con){ die('Could not connect: ' . mysql_error()); }
mysql_select_db("ag_online", $con);
foreach($_POST['data'] as $d ){
$sql = "INSERT INTO `contacts` VALUES ('', '".$d."');";
mysql_query( $sql );
}
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
?>
</body>
</html>
答案 0 :(得分:2)
如果表格有8列,则不能使用:
$sql = "INSERT INTO `contacts` VALUES ('', '".$d."');";
直接
您必须指定要插入的列:
$sql = "INSERT INTO `contacts` (col1, col2) VALUES ('', '".$d."');";
<强>更新强>
当你使用
foreach($_POST['data'] as $d ){
$sql = "INSERT INTO `contacts` VALUES ('', '".$d."');";
mysql_query( $sql );
}
与使用
相同foreach($_POST['data'] as $d ){
$sql = "INSERT INTO `contacts` (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto) VALUES ('', '".$d."');";
mysql_query( $sql );
}
正如你在评论中所说的那样。
然而,当你在$_POST['data']
上循环时,它会变成类似的东西:
第一个循环:
$sql = "INSERT INTO `contacts` (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto) VALUES ('', 'FIRST_VALUE');";
第一个循环:
$sql = "INSERT INTO `contacts` (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto) VALUES ('', 'SECOND_VALUE');";
也就是说,在您说出8后,您将尝试插入2个值。
您可以使用以下内容填充变量$info
,然后执行唯一的insert
:
$info=implode(",", $_POST['data']);
$info="\"".implode("\",\"", $_POST['data'])."\""; //<--- updated answer, to have all items "wrapped"
然后
$sql = "INSERT INTO `contacts` (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad, Foto) VALUES ('', $info);";
答案 1 :(得分:0)
如果您尝试将每个列放在列中,那么您可能需要考虑这个
$sql = "INSERT INTO `contacts` VALUES ('";
foreach($_POST['data'] as $d ){
$sql .= $d."','";
}
$sql = substr_replace($sql, "", -2);
$sql .= ");";
mysql_query( $sql );