0

以下に基づく挿入コマンドがあります。

$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 ( IDint(50) NOT NULL AUTO_INCREMENT,
StaticCodevarchar(100) NOT NULL, Points_IDvarchar(50) NOT NULL, PRIMARY KEY ( ID), UNIQUE KEY ID( ID) ) ENGINE=InnoDB

$insertSQL2さて、例えば次のようにエコーするとしましょうINSERT INTO table2 (Points_ID, StaticCode) VALUES ('24859', '123456'), ('24649', '123456'), ('25166', '123456')

table2 に 3 つの行が表示されることを期待しますが、次のようになります。

  • どちらの挿入コマンド ($insertSQL1および$insertSQL2) も、実際にはデータを挿入します。
  • $insertSQL1すべてのフォームから table1 の必要なフィールドにすべてのデータを挿入しますが、 $insertSQL2(配列を挿入している) は挿入しません。静的コードを 1 回挿入し、Points_ID を空白のままにします。

エコーされたコマンドを PHPMySQL にコピーするだけで INSERT ステートメントをテストしましたが、想定どおりに動作するので、MySQL のバージョンがそれを処理できることがわかります。

理由はありますか?

4

1 に答える 1

0

コードから、mysql 拡張機能を使用しているように見えます。mysqli または pdo_mysql を使用する必要があります。トランザクションは mysql では機能しないと思います。

mysqli はほとんど同じように見えますが、トランザクションには mysqli の機能を使用します

/* set autocommit to off */
$mysqli->autocommit(FALSE);

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

/* commit transaction */
$mysqli->commit();
于 2013-01-23T15:55:53.537 に答える