0

少しでもお役に立てれば幸いです。

ユーザーがタイトル、説明、割り当てられたユーザーなどをタスクの仕様に入力できる追加タスクテーブルを作成しています。別の行 (タスク) を追加するオプションがあり、これは ajax を使用して生成されます。

行の各入力には元の名前 (name="tasktitle0", name="privacy0") があり、新しい行を追加すると、変数がインクリメントされ、if ex (tasktitle1 、および taskprivacy1 など)。

フォームを送信すると、入力の名前を subst() し、最初の 4 文字をトリミングしてから最後の文字をトリミングして、名前が「タイトル」、「プライバシー」になるようにします。それらを挿入するデータベースの列と同じです。 .

タスクを 1 つだけ送信すると、アプリは機能します。しかし、新しい行 (タスク) を作成すると、MySql で次のエラーが表示されます。

エラーが発生しました。エラー #Column 'privacy' が 2 回指定されました

なぜそうしているのかはわかっています。この問題を解決する方法を知りたいだけです。

これは、名前をトリミングする php です。

if ($_GET['s'] == "Y") {
    $str2 = '';
    foreach ($_POST as $p => $v) {
        if (substr($p, 0, 4) != "flag" && $p != "key" && substr($p, 0, 4) == "task") {
            if (!empty($v)) {
                $str2 .= mb_substr(substr($p, 4), 0, -1) . "='" . addslashes($v) . "',";
            } else {
                $str2 .= substr($p, 4) . "=NULL,";
            }
        }
    }
}

挿入する場所は次のとおりです。

$sql3 = "INSERT INTO nameofDB.tablename SET ";
$sql3 .= $str2;
$sql3 = substr($sql3, 0, -1);

if ($str2 != '') {
    if ($r2 = mysql_query($sql3, $Link)) {
        $mess = "Successfully saved support ticket.";
    } else {
        $mess = "There was an error. Error #" . mysql_error($Link);
        echo $mess . "<br>";
        echo $sql3;
        exit;
    }
}

表示されるエラーは次のとおりです。

これは、2 つの行 (タスク) を実行するときです。1 つのクエリで、列に 2 回挿入するように指示していることはわかっていますが、どうすればこれを修正できますか? アイデア?

エラーが発生しました。エラー #Column 'privacy' が 2 回指定されました'3171',status='INACTIVE',priority='MEDIUM',privacy='PUBLIC',ticketNum='95240560',title='sad',tdesc='d',datefrom='02/28/2013', cat='BEREAVEMENT',userid='1949',status='COMPLETED',priority='HIGH',privacy='PRIVATE'

4

2 に答える 2

2

エラー メッセージがすべてを示しています:列に 2 つの値を挿入しようとしていますprivacy

INSERT INTO dbname.tablename SET ticketNum='95240560',title='d',tdesc='asd',datefrom='02/26/2013',cat='PERSONAL',userid='3171',status='INACTIVE ',priority='MEDIUM', privacy='PUBLIC' ,ticketNum='95240560',title='sad',tdesc='d',datefrom='02/28/2013',cat='BEREAVEMENT',userid= 「1949」、状態 =「完了」、優先度 =「高」、プライバシー =「非公開」

さらに悪いことに、2 つの異なる値を割り当てています。競合する値を取得しているという良い兆候ではないため、ロジックを確認する必要があります。

于 2013-02-23T20:35:34.070 に答える
2

一度に複数の行を MySQL テーブルに挿入するための SQL 構文は次のとおりです。

INSERT INTO nameofDB.tablename
    (columnName1, columnName2, columnName3, columnName4)
VALUES
    ('row1value1', 'row1value2', 'row1value3', 'row1value4'),
    ('row2value1', 'row2value2', 'row2value3', 'row2value4');

INSERT ... SET構文を使用して、1 つのクエリに複数の行を挿入することはできません。

詳細については、http://dev.mysql.com/doc/refman/5.5/en/insert.htmlを参照してください。

于 2013-02-23T20:37:24.167 に答える