我收到此错误的是我的代码
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,但仍无效。
答案 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 (...)