数据库问题 - 不同行中的值相同
问题描述:
我正在尝试使我的投票系统正常工作。我有3个数据库表: 用户,帖子,投票数据库问题 - 不同行中的值相同
表用户有字段用户名作为主键。表格帖子具有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
想要为特定帖子投票,这可以再次正常工作,但只能使用一次。在我看来,数据库存在某种问题,因此只能有一个条目与username
或post_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";
}
}
答
没有看到你的votes
表是如何创建的,我的猜测是,username
已设置为主键。这将使第一个INSERT
工作,但所有未来的失败。什么,你需要做的是改变它有username
& post_id
是主键
ALTER TABLE `votes` DROP PRIMARY KEY , ADD PRIMARY KEY ( `username`, `post_id`)
你错过了与预处理语句的地步,你没有真正准备任何东西。准备好的语句的目的是让它稍后接受执行的变量,以便它们作为字符串插入到查询中,从而使SQL注入更安全。 – Jonast92 2013-03-17 23:28:46