错误:列数与第1行的值计数不匹配

时间:2012-04-04 06:47:18

标签: php mysql

我收到此错误的是我的代码

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,但仍无效。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

您应该真的指定列名称,否则如果稍后添加列,您的应用就会中断,即使它具有可用的默认值:

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

特别是因为你有一个auto_increment ID列是有意义的;否则,您必须始终在查询中将其指定为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 - 那么你可以使用类似于格式字符串的东西,但不必处理转义。

答案 2 :(得分:1)

尝试命名要填充的列,如

insert into projects (col1, col2, col3) values (...)