1

ここでこのエラーが発生しているのは私のコードです

if(isset($_POST['submit']))
    {
     $projTit=mysql_escape_string($_POST['projecttitle']);
     $projCat=mysql_escape_string($_POST['projectcategory']);
     $budget=intval(mysql_escape_string($_POST['budget']));
     $description=mysql_escape_string($_POST['editor1']);
     $query=sprintf("insert into projects value('%s','%s','%s',%d)",
            $projTit,$description,$projCat,$budget);
     if (!mysql_query($query)){
         die('Error: ' . mysql_error());
         }
        echo '<p class="record">Your Record has been Added<p>';
    }

    ?>

%dを書き込もうとしました''が、まだ機能しません。

4

3 に答える 3

6

テーブルには 5 つの列があります。ただし、Project_Id列に値を指定していません。これにより、あなたが言及したエラーが発生します。

PRIMARY KEY自動インクリメントの可能性が高いため、値を提供していないことを理解しています。意図的にその列の値を渡さないことを MySQL に伝えるには、最初の値として追加する必要があります。NULL

value(NULL, '%s','%s','%s',%d)

ただし、将来新しい列を追加する場合に備えて、挿入する列に具体的に名前を付ける必要があります。

INSERT INTO projects (col1, col2, col3, col4) value ('%s','%s','%s',%d)
于 2012-04-04T07:04:28.897 に答える
2

列名を実際に指定する必要があります。そうしないと、後で列を追加すると、使用可能なデフォルト値があったとしても、アプリが壊れます。

INSERT INTO projects
    (Project_Title, Project_Description, Project_Category, Project_Budget)
VALUES
    (...)

特にauto_incrementID 列があるので、それは理にかなっています。それ以外の場合は、常にクエリのように指定する必要がありNULLます。

したがって、最も簡単な(しかし最も醜い)修正は次のようになります。

$query=sprintf("insert into projects value (null, '%s','%s','%s',%d)",
        $projTit,$description,$projCat,$budget);

適切な修正は次のとおりです。

$query = sprintf("
    INSERT INTO projects
        (Project_Title, Project_Description, Project_Category, Project_Budget)
    VALUES
        ('%s', '%s', '%s', %d)
    ", $projTit,$description,$projCat,$budget);

ところで、PDO の使用を検討してください。フォーマット文字列に似たものを使用できますが、エスケープ処理を行う必要はありません。

于 2012-04-04T06:59:37.180 に答える
1

埋めたい列に名前を付けてみてください

insert into projects (col1, col2, col3) values (...)
于 2012-04-04T06:49:59.700 に答える