我的MySQL查询不起作用,没有任何内容进入数据库

时间:2011-10-12 14:30:41

标签: php mysql dreamweaver

我试图将一篇文章放到数据库中,但是失败了:

$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());

5 个答案:

答案 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在语法上是完美的,但是有太多其他原因导致查询无法检查。