无法在mysql表中插入post数组

Posted

技术标签:

【中文标题】无法在mysql表中插入post数组【英文标题】:Cannot insert post array in mysql table 【发布时间】:2013-03-21 21:44:39 【问题描述】:

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

【问题讨论】:

【参考方案1】:

如果表格有 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 ); 

正如你在 cmets 中所说的那样。

但是,当您在 $_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);";

【讨论】:

我试过:foreach($_POST['datos'] as $d) $sql = "INSERT INTO contactos (Nombre, Apellido, Direccion, Telefono, Telefono2, Email, Edad , 照片) 值 ('', '".$d."');"; mysql_query($sql); 你能不能显示print_r($_POST['datos']); 这样我们可以看到会发生什么 你将如何插入 nombre、apellida、direccion、telefono 等。具有值(''、''、'id'),它不再匹配。正如@zipser 所说,你必须明确告诉你要插入哪一列。如果你要插入 2 个值,那么只有 2 列 确定:数组 ( [0] => 姓名 [1] => 姓氏 [2] => 地址 [3] => 123 [4] => 456 [5] => 电子邮件@mail .com [6] => 25 [7] => 照片) 好的,所以你必须遵循@RoyalBg 告诉你的内容:插入你在INSERT INTO contacts (field1, field2, ...) VALUES ... 上指定的尽可能多的字段。【参考方案2】:

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

$sql = "INSERT INTO `contacts` VALUES ('";
foreach($_POST['data'] as $d )
 $sql .= $d."','";

 $sql = substr_replace($sql, "", -2);
 $sql .= ");";
 mysql_query( $sql ); 

【讨论】:

它会给出尾随逗号+撇号,这将产生错误,您需要在循环外删除最后一个逗号+撇号。 我收到这个代码错误:解析错误:语法错误,第 29 行 C:\wamp\www\ABM 1\index.php 中的意外 T_FOREACH 第一行后加分号

以上是关于无法在mysql表中插入post数组的主要内容,如果未能解决你的问题,请参考以下文章

将两个数组插入到一个mysql表中

无法在 MySQL 表中插入 ♥ 字符

如何从多个 $_POST 数组中插入 MYSQL 行

无法在mysql表中插入主键

无法选择最后插入的 id 为 [Mysql, php pdo oop] [重复] 的行

如何使用node.js在mySQL中插入数组[重复]