【问题标题】:database trouble - same values in different rows数据库问题 - 不同行中的相同值
【发布时间】:2013-03-17 23:18:37
【问题描述】:

我正在努力使我的投票系统正常工作。我有 3 个数据库表: 用户、帖子、投票

表用户有字段用户名作为主键。表 post 具有 post_id 作为主键。 (有更多字段,但它们不会影响问题/问题)

在投票表中,我有 3 个字段:username, post_id, vote。投票是enum('positive', 'negative')。我想要实现的是,如果用户为页面上显示的特定帖子投票,则查询:INSERT INTO votes ('username','post_id','vote') VALUES('$user_name','$post_id', 'positive');将被执行。

如果假设用户 123123 还没有投票给任何帖子,它就可以工作。当这个用户投票让我们说帖子 1 时,这个查询工作正常。但是,如果这个用户想要投票给不同的帖子,(他的投票被计算在内 - 我只是复制了不起作用的部分代码,其余部分很好并且可以工作)插入查询不会执行。如果用户abcd 想为特定帖子投票,这又可以正常工作,但只有一次。在我看来,数据库存在某种问题,因此只能有一个具有相同usernamepost_id 的条目。如果我希望一个用户能够为多个帖子投票,我该如何解决这个问题?有没有更好的策略?

if($runloggedin->num_rows == 1)
{
    // If there was no vote for the current posting, then execute this query
    $query = "SELECT * FROM posts WHERE post_id='".$post_id."' AND user_name='".$user_name."'";         //get username and the post id
    $result = $mysqli->query($query);
    $query1 = "SELECT * FROM votes WHERE post_id='".$post_id."' AND username='".$user_name."'";         //check if there is a vote for this post already
    $result1 = $mysqli->query($query1);

    if ($result->num_rows == 1 && $result1->num_rows == 0)
    {
        $vote = "INSERT INTO votes ('username','post_id','vote') VALUES('$user_name','$post_id', 'positive')";          // this isn't working. everything else seems to be working (still test it more)
        $savevote = $mysqli->query($vote);
        $addvote = "UPDATE posts SET posvotes=posvotes+1 WHERE post_id='".$post_id."'";
        $runvote = $mysqli->query($addvote);
        echo "Thank you for your vote";
    }
}

【问题讨论】:

  • 你在准备好的陈述中错过了重点,你并没有真正准备任何东西。准备好的语句的要点是让它稍后接受已执行的变量,以便将它们作为字符串插入到查询中,从而使查询免受 sql 注入的影响。

标签: php mysql


【解决方案1】:

没有看到您的votes 表是如何创建的,我猜测username 已被设置为主键。这将使第一个 INSERT 工作,但所有未来的失败。您需要做的是将其更改为以 username & post_id 为主键

ALTER TABLE  `votes` DROP PRIMARY KEY , ADD PRIMARY KEY (  `username`, `post_id` )

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2023-02-11
    • 1970-01-01
    • 2011-10-21
    • 2018-08-01
    相关资源
    最近更新 更多