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


Inserting array returning incomplete data (MySQL/PHP)

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

$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 插入到另一个表)

表结构如下:

table2 ID int(50) 不空 AUTO_INCREMENT,
StaticCode 瓦尔查尔(100) 不为空, Points_ID 瓦尔查尔(50) 不为空, 主键 ( ID ), 唯一密钥IDID ) ) 引擎=InnoDB

现在,让我们假设$insertSQL2回声为INSERT INTO table2 (Points_ID, StaticCode) VALUES ('24859', '123456'), ('24649', '123456'), ('25166', '123456')

我希望表中会出现三行2 ...但事实就是如此:

  • 事实上,两个插入命令($insertSQL1$insertSQL2)都插入数据。
  • 只是,虽然$insertSQL1将所有表单中的所有数据插入到 table1 中的必填字段中,但$insertSQL2(插入数组)不会 - 它只是插入静态代码一次,并将Points_ID留空。

我已经通过将回显的命令复制到 PHPMySQL 中来测试 INSERT 语句,它完全符合它应该做的事情,所以我知道我的 MySQL 版本可以处理它。

知道为什么吗?

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

Mysqli看起来几乎相同,但对于事务使用mysqli功能

/* set autocommit to off */
$mysqli->autocommit(FALSE);
/* Insert some values */
$mysqli->query($insertSQL);
/* commit transaction */
$mysqli->commit();