Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入返回不完整数据的数组(MySQL/PHP)_Php_Mysql_Insert - Fatal编程技术网

插入返回不完整数据的数组(MySQL/PHP)

插入返回不完整数据的数组(MySQL/PHP),php,mysql,insert,Php,Mysql,Insert,我有一个基于以下内容的insert命令: $baseINS = "INSERT INTO table2 (Points_ID, StaticCode) VALUES "; $arrayINS = explode(", ", $arraystring); foreach ($arrayINS as &$array1INS) { $array1INS = "('" . $array1INS . "', '123456')"; } $arrayvaluesINS = implode('

我有一个基于以下内容的insert命令:

$baseINS = "INSERT INTO table2 (Points_ID, StaticCode) VALUES ";
$arrayINS = explode(", ", $arraystring);
foreach ($arrayINS as &$array1INS) {
    $array1INS = "('" . $array1INS . "', '123456')";
}
$arrayvaluesINS = implode(', ', $arrayINS);
$insertSQL2 = $baseINS . $arrayvaluesINS;
从以下事务中查询
$insertSQL2

$insertSQL = "BEGIN";
mysql_query($insertSQL) or die (mysql_error());
$insertSQL = $insertSQL1;
mysql_query($insertSQL) or die (mysql_error());
$insertSQL = $insertSQL2;
mysql_query($insertSQL) or die (mysql_error());
$insertSQL = "COMMIT";
mysql_query($insertSQL) or die (mysql_error());
(其中,
$insertSQL1
是另一个SQL插入到另一个表)

表结构如下:

表2
ID
int(50)非空自动增量,
StaticCode
varchar(100)不为空,
Points\u ID
varchar(50)不为空, 主键(
ID
), 唯一键
ID
ID
) )引擎=InnoDB

现在,让我们举例来说,
$insertSQL2
作为
插入到表2中(Points_ID,StaticCode)值('24859','123456'),('24649','123456'),('25166','123456')的回声

我预计表2中会出现三行……但实际情况如下:

  • 事实上,插入命令(
    $insertSQL1
    $insertSQL2
    )都可以插入数据
  • 只是,
    $insertSQL1
    将所有表单中的所有数据插入表1中的必填字段,而
    $insertSQL2
    (插入数组)没有插入,它只插入静态代码一次,并将点ID留空
我已经测试了INSERT语句,只需将回音命令复制到PHPMySQL中,它完全按照预期的方式执行,因此我知道我的MySQL版本可以处理它


你知道为什么吗?

从你的代码看,你正在使用mysql扩展。您应该使用mysqli或pdo_-mysql。我相信事务在mysql上不起作用

mysqli看起来几乎一样,但用于事务


您需要显示您的表结构。e、 g.
Points\u ID
是外键字段吗?是否存在匹配的外国记录?您的代码也容易受到SQL注入的攻击,您使用的是非常危险的foreach()构造,并且实际的查询调用非常冗长。e、 清理你的代码,也许事情会开始工作。@MarcB-这只是目前概念的证明(因此代码混乱)。表结构:`
table2
ID
int(50)非空自动递增,
StaticCode
varchar(100)非空,
点ID
varchar(50)非空,主键(
ID
),唯一键
ID
ID
)ENGINE=InnoDB`这能解释为什么它执行INSERT INTO命令的大部分,而不是全部吗?它肯定会起作用还是不起作用?我得到的是一些信息被插入,而一些信息没有被插入。(我同意我可能会将其升级到mysqli,但我也只是想了解实际问题!):-)我想说的是,在这种情况下,“开始”和“提交”没有任何效果,所以是的,可以插入一些信息,但如果有任何问题,不能全部插入。
/* set autocommit to off */
$mysqli->autocommit(FALSE);

/* Insert some values */
$mysqli->query($insertSQL);

/* commit transaction */
$mysqli->commit();