我在mySQL数据库中有一个表,我使用php放置从android应用程序检索的值。 现在值是一个UniqueID,所以我保留了它的数量,以便我可以知道我的应用程序访问了多少次。 当一个新的UniqueID到达时,它将被添加到count = 1的数据库中,当一个现有的UniqueID被撤消时,它的计数就会递增。 我多次尝试我的PHP脚本,但没有运气。我附上我的PHP脚本供参考。
<?php
ini_set('default_charset', 'utf-8');
header('Content-Type: text/html; charset=UTF-8');
$n=$_POST['UniqueID'];
$count=1;
$Today=date("F j, Y, g:i a");
mysql_connect("localhost","root","");
mysql_select_db("farm-o-pedia");
$con="select userid from uniqueid";
$result=mysql_query($con) or die(mysql_error());
if($result=$n)
{
$upd="update uniqueid set count=count+1 where userid=$n";
$result=mysql_query($upd) or die(mysql_error());
}
else {
$que="insert into uniqueid (userid,count,date) values($n,\"$count\",\"$Today\")";
$sql=mysql_query($que) or die(mysql_error());
}
mysql_close();
?>
任何帮助都将不胜感激。谢谢!
答案 0 :(得分:3)
另一种方法是利用MySQL的ON DUPLICATE KEY UPDATE
要做的第一件事是在列UNIQUE
上定义userid
约束(如果它是PRIMARY KEY,则跳过此步骤。),
ALTER TABLE uniqueid ADD CONSTRAINT tb_uq UNIQUE (userid)
执行查询后,ON DUPLICATE KEY UPDATE
现在就可以正常工作了。
您将没有SELECT
和其他IF
。
INSERT INTO UNIQUEID (userID `count`, date)
VALUES ('idHere', 0, NOW())
ON DUPLICATE KEY
UPDATE `count` = `count` + 1;
答案 1 :(得分:2)
mysql_query返回结果集,而不是单个结果,因此:
$con="select userid from uniqueid";
$result=mysql_query($con) or die(mysql_error());
if($row=mysql_fetch_assoc($result)) { //if a row is found in resultset, then you already have this id in your table
$upd="update uniqueid set count=count+1 where userid=$n";
$result=mysql_query($upd) or die(mysql_error());
} else {
$que="insert into uniqueid (userid,count,date) values($n,\"$count\",\"$Today\")";
$sql=mysql_query($que) or die(mysql_error());
}
此外,您应该开始使用mysqli函数而不是mysql,因为不推荐使用mysql
答案 2 :(得分:2)
查看if($result=$n)
行 - 这将永远不会奏效。部分比较运算符是==
而不是=
,结果字符串也包含查询结果而不是单个值。
将该行替换为:
if (mysql_num_rows($result)===1)
其次,你应该真正考虑转义你的查询,并且最好从使用弃用的mysql_ *函数转换为PDO或mysqli。