0

$add_rows = $_POST['add-rows']テーブルに数と同じ数の行を挿入したい。私が今働いているもののために、私は32行が必要です。SQL VALUESの一部をループにして、32行に入るようにするにはどうすればよいですか?

これが私のフォームです

<form>
<input name="add-name" id="add-name" type="text" value="">
<input name="add-start" id="add-start" type="text" value="">
<input name="add-end" id="add-end" type="text" value="">
<input name="add-rows" id="add-rows" type="text" value="">
<input name="add-submit" id="add-submit" type="submit" value="Add" />
</form>

以下は、フォームから投稿する値です。残りの値はNULLとして設定できます。

$add_name = $_POST['add-name'];
$add_start = $_POST['add-start'];
$add_end = $_POST['add-end'];
$add_rows = $_POST['add-rows']; //in this case, the value is 32

これはクエリです...32個の値を入力する必要があります。

mysql_query("INSERT INTO table position, name, start, end, code, one, two, three, four, five, six) 
VALUES (NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL)")
or die(mysql_error());
4

4 に答える 4

1

これにより、32行になるはずです。

$sql = "INSERT INTO table (position, name, start, end, code, one, two, three, four, five, six) 
VALUES (NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL)"
     . str_repeat(", (NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL)", $add_rows - 1)
mysql_query($sql);
于 2013-03-12T17:02:38.960 に答える
0

列名は括弧の間にある必要があります。構文を確認する必要があると思います。

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

これは質問と回答のサイトであり、この構文サイトを教えてくれないと思います。@Azukah学習のためにこの構文を見てください。また、構文だけが必要な場合は、他の回答を確認してください。

:)

于 2013-03-12T17:11:30.340 に答える
0

あなたはこれを試すことができます

mysql_query("INSERT INTO table position, name, start, end, code, one, two, three, four, five, six) 
VALUES (NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(NULL, '$add_name', '$add_start', '$add_end', NULL, NULL, NULL, NULL, NULL, NULL, NULL)")
or die(mysql_error());

ここでは4行しかありませんが、32行では実行できません。

ループ内でリクエストを作成することもできます(さまざまな変数値を設定するため)。各値の間のコンマを忘れないでください(ただし、最後の行の最後にコンマはありません)。

于 2013-03-12T17:03:10.317 に答える
0

プリペアドステートメントと一緒にPDOを使用します。

$dbh = new PDO('mysql:host=localhost;dbname=example', $user, $pass);
$stmt = $dbh->prepare("INSERT INTO table (position, name, start, end, code, one, two, three, four, five, six) VALUES (NULL, :add_name, :add_start, :add_end, NULL, NULL, NULL, NULL, NULL, NULL, NULL)");
$stmt->bindParam(':add_name', $add_name);
$stmt->bindParam(':add_start', $add_start);
$stmt->bindParam(':add_end', $add_end);

for ($i = 0; $i < $add_rows; $i++) {
    $stmt->execute();
}

これには、SQLインジェクション攻撃に対してクエリを強化するという追加の利点があります。あなたの質問と他の回答(執筆時点)は、エスケープされていない$_POST値をクエリで直接使用しています。

于 2013-03-12T17:04:38.893 に答える