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

您的表格有五列。但是,您没有为该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 回答