Php 错误:列计数不为';不匹配第1行的值计数

Php 错误:列计数不为';不匹配第1行的值计数,php,mysql,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=my

我得到这个错误,这是我的代码

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>';
    }

    ?>
if(isset($\u POST['submit']))
{
$projTit=mysql\u escape\u字符串($\u POST['projecttitle']);
$projCat=mysql\u escape\u字符串($\u POST['projectcategory']);
$budget=intval(mysql_escape_字符串($_POST['budget']);
$description=mysql_escape_字符串($_POST['editor1']);
$query=sprintf(“插入到项目值('%s','%s','%s',%d)”,
$projTit,$description,$projCat,$budget);
if(!mysql_query($query)){
die('Error:'.mysql_Error());
}
echo'

您的记录已添加; } ?>

我已尝试在
''
中写入%d,但仍然无法工作


尝试将要填充的列命名为

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

尝试将要填充的列命名为

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

你应该真正地指定列名,否则如果你以后添加一列,你的应用程序将中断,即使它有一个可用的默认值:

INSERT INTO projects
    (Project_Title, Project_Description, Project_Category, Project_Budget)
VALUES
    (...)
特别是因为您有一个
自动增量
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——然后你可以使用类似于格式字符串的东西,但不必处理逃逸。

< P>你应该<强>真正的< /强>指定列名,否则你的应用程序会在稍后添加一个列时中断,即使它有一个可用的默认值:

INSERT INTO projects
    (Project_Title, Project_Description, Project_Category, Project_Budget)
VALUES
    (...)
特别是因为您有一个
自动增量
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——然后你可以使用类似于格式字符串的东西,但不必处理逃逸。

< P>你的表有五列。但是,您没有为
项目Id
列提供值。这会给你你提到的错误

我知道您没有提供值,因为它可能是自动递增的
主键。要告诉MySQL您有意不传递该列的值,您应该添加
NULL
作为第一个值。

value(NULL, '%s','%s','%s',%d)
但是,您确实应该明确指定要插入的列,以防将来添加新列

INSERT INTO projects (col1, col2, col3, col4) value ('%s','%s','%s',%d)

您的表有五列。但是,您没有为
项目Id
列提供值。这会给你你提到的错误

我知道您没有提供值,因为它可能是自动递增的
主键。要告诉MySQL您有意不传递该列的值,您应该添加
NULL
作为第一个值。

value(NULL, '%s','%s','%s',%d)
但是,您确实应该明确指定要插入的列,以防将来添加新列

INSERT INTO projects (col1, col2, col3, col4) value ('%s','%s','%s',%d)

你的桌子结构是什么?如果不指定列集,则必须为所有列提供值。@Interrobang抱歉,我不明白什么是列集,让我显示我的表结构抱歉,我的意思是如果不指定要插入的列(使用类似
插入表(col1,col2,col3)的语法值(val1,val2,val3)
)然后您必须为所有列指定值:)@Interrobang我已经编辑并显示了我的表我正在为所有列提供值。您的表结构是什么?如果不指定列集,则必须为所有列提供值。@Interrobang抱歉,我不明白什么是列集,让我显示我的表结构抱歉,我的意思是如果不指定要插入的列(使用类似
插入表(col1,col2,col3)的语法值(val1,val2,val3)
)然后您必须为所有列指定值:)@Interrobang我已编辑并显示了我的表我正在为所有列提供值。错误。“值在此上下文中是值的同义词。两者都不表示值列表的数量,也可以用于单个值列表或多个列表。”不指定列名并将值更改为值仍然无效。错误。VALUE是此上下文中值的同义词。两者都不表示值列表的数量,也可以用于单个值列表或多个列表不指定列名并将值更改为值仍不起作用。是命名列我可以添加值谢谢帮助。是命名列我可以添加值谢谢帮助。