Php SQL查询插入不起作用将值插入my DB
我试图在数据库中插入一些值,但它不起作用,我试图找出它不起作用的原因,但我是一名业余php程序员 这是我正在使用的代码:Php SQL查询插入不起作用将值插入my DB,php,mysql,sql,insert,Php,Mysql,Sql,Insert,我试图在数据库中插入一些值,但它不起作用,我试图找出它不起作用的原因,但我是一名业余php程序员 这是我正在使用的代码: $insert = mysql_query (" INSERT INTO news(id,title,body,date,by) VALUES ('NULL','".$title."','".$body."','".$date."','".$by."') "); mysql_close($connect); 我试图插入的行是:id、t
$insert = mysql_query
("
INSERT INTO news(id,title,body,date,by)
VALUES ('NULL','".$title."','".$body."','".$date."','".$by."')
");
mysql_close($connect);
我试图插入的行是:id、title、body、date、by但它并没有出现在数据库或我的新闻页面上
有人能帮我吗?
by
是一个特殊的关键字。尝试将列名用记号标记:
INSERT INTO news(`id`,`title`,`body`,`date`,`by`)
尝试调用mysql_error()以获取错误消息:
首先,不要将单引号括在NULL周围,否则它将作为字符串输入 另外,我假设您正在使用来清理$title、$body等
$title = mysql_real_escape_string($title);
$body = mysql_real_escape_string($body);
$date = mysql_real_escape_string($date);
$by = mysql_real_escape_string($by);
正如梅拉莫克指出的那样,by
和date
是特殊的关键词。最好在列(和表名)周围加上记号。(这将修复您的查询)
我希望id是你的主键。它不应该允许空值。如果它是自动递增的,您可以尝试以下方法:
$insert = mysql_query
("
INSERT INTO news(title,body,date, by)
VALUES ('".$title."','".$body."','".$date."','".$by."')
");
其他人注意到是一个保留字,所以你需要引用它。最好避免使用保留字命名数据库对象。考虑将<代码>改名为<代码> >栏> <代码>作者<代码> < /P>
你应该考虑把查询更改成事先准备好的语句。请参阅。我建议使用&来处理SQL注入攻击的可能性:
$insert = sprintf("INSERT INTO news
(id, title, body, date, `by`)
VALUES
(NULL,'%s','%s','%s','%s')",
mysql_real_escape_string($title),
mysql_real_escape_string($body),
mysql_real_escape_string($date),
mysql_real_escape_string($by));
$result = mysql_query($insert) or die(mysql_error());
这也会让您知道遇到了什么错误
尽管如此,仍存在许多潜在问题:
- ,您需要反勾号来避免在MySQL中使用它(参见上面的示例)。另一种方法是将列重命名为非保留字的名称——在每个列和/或表名上打勾会隐藏此类问题,而不是学习
- NULL不应位于单引号内,否则将被解释为字符串<如果列上有默认约束,则代码>默认值将是另一个选项
列应该是日期、日期时间或时间戳数据类型,而不是字符串才能使用,如果该值不是MySQL标准日期格式,则应该使用该列date
$title
等来自用户输入,则不希望直接插入到查询中,否则将存在SQL注入漏洞。请看,您可能想要mysql_查询($sql)或死亡(mysql_error());以获取有关错误的更多信息。还要确保名为id
Ah非常感谢:)的列中允许有空值,我不能再接受你的回答7分钟,我会再检查,再次感谢巴德:)我想这同样适用于日期。good point.NULL是触发自动增量
或默认
约束的公认方法。但是OP在单引号中指定了NULL,所以它会被解释为一个字符串……我在将它们设置为NULL时遇到了默认和自动增量约束的问题,但是Oracle通过JDBC准备的语句实现了这一点。通常,我会尽量避免指定查询中没有数据或不需要数据的列。
$insert = sprintf("INSERT INTO news
(id, title, body, date, `by`)
VALUES
(NULL,'%s','%s','%s','%s')",
mysql_real_escape_string($title),
mysql_real_escape_string($body),
mysql_real_escape_string($date),
mysql_real_escape_string($by));
$result = mysql_query($insert) or die(mysql_error());