PHP不会更新MYSQL数据库

时间:2014-12-15 04:33:36

标签: php mysql

我有这个PHP代码,应该检查一个单词是否已经在数据库中。如果是,它只是添加一个单词被选择的次数。如果它不在数据库中,则会添加它。我遇到的问题是它没有更新我的数据库。我已经证实一切都正常连接,它甚至回应了所选择的单词。它只是不会更新。我的代码如下:

<?php

include 'swearTrackDB.php';
$conn = mysql_connect($host,$user,$pass) or die ('could not connect');
$dbs = mysql_select_db($databaseName, $conn) or die ('could not reach database');

if(isset($_POST['mash'])) {
$mash = $_POST['mash']; 

$query = mysql_query("SELECT * FROM tracker1 WHERE string='$mash'");
if(mysql_num_rows($query) > 0) {

    $sql = "UPDATE tracker1 SET count = count + 1 WHERE string = $mash";

}else{

    $sql = "INSERT INTO tracker1 ('string') VALUES ('$mash')";
}

}

?>

请帮忙!我无法弄清楚这一点,我一直在寻找几个小时!

提前致谢


即使我的代码显着更新,这也没有给我任何错误,但它仍然没有发布到数据库。那里的任何人还是愿意帮助我解决我的愚蠢问题吗?

<?php

include 'swearTrackDB.php';
$conn = mysql_connect($host,$user,$pass) or die ('could not connect');
$dbs = mysql_select_db($databaseName, $conn) or die ('could not reach database');

if(isset($_POST['mash'])) {
$mash = $_POST['mash']; 

$query = mysql_query("SELECT * FROM tracker1 WHERE string='$mash'");
if(mysql_num_rows($query) > 0) {

    $updatequery = mysql_query("UPDATE tracker1 SET count = count + 1 WHERE string = $mash");

    mysql_select_db('tracker1');
    $sql = mysql_query( $sql, $conn );
    if(! $retval )
    {
      die('Could not update data: ' . mysql_error());
    }
    echo "Updated data successfully\n";
    mysql_close($conn);

}else{

    $sql = mysql_query("INSERT INTO tracker1 ('string', 'count', 'upvote', 'downvote') VALUES     ('$mash', '1', '0', '0')");

    mysql_select_db('tracker1');
    $retval = mysql_query( $sql, $conn );
    if(! $retval )
    {
      die('Could not update data: ' . mysql_error());
    }
    echo "Updated data successfully\n";
    mysql_close($conn);
}

}

?>

2 个答案:

答案 0 :(得分:3)

在您的第一个代码实例中,我可以看到您执行select查询的位置,但更新和插入不会因为将它们放入字符串变量而神奇地执行: - )

你也需要在这些问题上致电mysql_query

但是,无论如何,除了严格的单用户环境之外,这是一个可怕的想法,因为你有竞争条件。在selectinsert/update之间,某人 else 可能会进入并更改您下方的数据库。

我怀疑更好的选择是使用MySQL的insert ... on duplicate key update ...功能,如文档here所述:

insert into tracker1 (`string`) values ('$mash')
on duplicate key update `count` = `count` + 1

还请注意列名称上的反引号,而不是单引号,您可能希望(在某些时候)查找sql injectionlittle bobby tables以查看为什么在您的查询中盲目使用未经过清除的$mesh在除米老鼠(a)应用程序之外的任何其他方面都是危险的。

如果您在查询中使用',请更深入地了解引号:

create table xyzzy (a int);
insert into xyzzy ('a') values (1);

你会看到以下内容:

You have an error in your SQL syntax;
Check the manual that corresponds to your MySQL server
  version for the right syntax to use near:
    "'a') values (1)" at line 1: insert into xyzzy ('a') values (1)

列名称可以被反引号包围,以保护它们不受SQL解析器的影响,但不是引号。之前的查询必须写为:

create table xyzzy (a int);
insert into xyzzy (`a`) values (1);

(a)米老鼠是华特迪士尼公司的注册商标,但我更倾向于使用俚语“不重要,琐碎”。提前向迪士尼道歉,我不希望不必要地削弱您的商标,但是,如果您对我的使用有疑问,您可能想要使用美国传统词典: - )

答案 1 :(得分:1)

替换此代码行

$sql = "UPDATE tracker1 SET count = count + 1 WHERE string = $mash";

使用:

$updatequery = mysql_query("UPDATE tracker1 SET count = count + 1 WHERE string = $mash");

这一行:

$sql = "INSERT INTO tracker1 ('string') VALUES ('$mash')";

使用:

 $insertquery = mysql_query("INSERT INTO tracker1 ('string') VALUES ('$mash')");