1

我正在尝试将包含 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>
4

2 回答 2

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);";
于 2013-03-31T18:30:45.870 回答
0

如果您试图将每一个都放在列中,那么您可能需要考虑这一点

$sql = "INSERT INTO `contacts` VALUES ('";
foreach($_POST['data'] as $d ){
 $sql .= $d."','";
}
 $sql = substr_replace($sql, "", -2);
 $sql .= ");";
 mysql_query( $sql ); 
于 2013-03-31T18:36:54.500 回答