我试图将一篇文章放到数据库中,但是失败了:
$con = mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("easy_db",$con);
mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES($title, $data, $topic, $author)");
mysql_close();
我检查了拼写并打印了所有变量($ title,$ data,$ topic,$ author),这是我从post-http获得的..
使用该语句没有向数据库插入任何内容。为什么呢?
我也遇到了错误:
= mysql_query("SELECT page FROM `easy_db`.`article` ORDER BY article_id DESC LIMIT 1") or die(mysql_error());
答案 0 :(得分:2)
在查询后使用错误检查语句,这样您就知道出了什么问题。另外,请注意SQL INJECTION,并在您的值周围加上单引号:
$con=mysql_connect("localhost","root","") or trigger_error(mysql_error());
mysql_select_db("easy_db",$con);
$title = mysql_real_escape_string($title);
$article = mysql_real_escape_String($article);
$topic = mysql_real_escape_string($topic);
$author = mysql_real_escape_string($author);
mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author)
VALUES('".$title."', '".$data."', '".$topic."', '".$author."')")
or die ('Error: '.mysql_error());
// mysql_close(); this is not necessary, though
答案 1 :(得分:1)
请替换
mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES($title, $data, $topic, $author)");
与
mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES($title, $data, $topic, $author)") or die(mysql_error();
再试一次。如果有错误,请告诉我们。确保你的变量在你所拥有的地方。
您应该使用全局变量$_POST
和$_GET
。
答案 2 :(得分:1)
由于这个问题已经成千上万的问题已经回答了其他问题(但从未被关闭过),我将指出一个有些不同的东西。
似乎全世界的每个人都在将SQL错误写入浏览器,甚至在执行过程中杀死他们的脚本。让用户留下加密的消息而没有控件,但却为潜在的攻击者提供了非常有用的信息。同时让程序员完全不了解网站上发生的错误。好笑,嗯?
这一般是PHP语言的黑暗面,它受到遍布全球的可怕代码示例的困扰,并且也是Stack Overflow这个站点的一个不好的一面,因为它在传播这些不良做法,错误代码方面发挥了重要作用,荒谬的习惯和奇怪的迷信。
因为答案质量永远不会影响其代表点。所以,人们可以写任何废话,它将被进一步投票,接受和复制。
所以,如果你想让你的代码更好一点 - 永远不要使用die()
。如果运行查询而使用trigger_error()
,它将根据当前的PHP设置填充错误信息:在测试服务器上它将进入screeen,但在实时服务器上将为站点程序员记录。它不会杀死你的脚本。
答案 3 :(得分:0)
VALUES('val1', 'val2'...)
变量::
mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES('$title', '$data', '$topic', '$author')");
您应该检查查询是否成功,如:
$result = mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES('$title', '$data', '$topic', '$author')");
if (!$result) {
echo mysql_error(); // find out what went wrong...
}
我们没有看到您的其他代码,但请确保您还使用$_POST
清除了mysql_real_escape_string()
的所有输入变量:
$title = mysql_real_escape_string($_POST['title']);
// etc...
答案 4 :(得分:0)
您很可能忘记引用插入的数据。查询看起来应该更像:
INSERT ... VALUES ('$title', '$data', '$topic', '$author')
你的代码应该是:
$result = mysql_query(...) or die(mysql_error());
如果你包含'或die()'部分,你会从mysql中得到一个语法错误,告诉你查询失败的原因。在运行查询后不检查错误条件几乎绝不是一个好主意。即使SQL在语法上是完美的,但是有太多其他原因导致查询无法检查。