我的问题如下:我向PHP脚本发送一个包含2个项目的表单,名称和分数。 php脚本使用这2个项目作为2个变量名称和得分的值。
<?php
$mysqli = mysqli_connect("localhost" ,"user" ,"password", "database");
$name = $_POST["name"];
$score = $_POST["score"];
现在,我想检查数据库中是否已经有一个名字相似的用户。 如果他找到某人,则应检查用户的当前分数是否高于数据库中的分数;如果此陈述也为真,则应更新该表,否则只需插入一个新用户:
$checkUser = "SELECT score FROM highscores where name LIKE '$name';";
$result=mysqli_query($mysqli,$checkUser);
$num_rows = mysqli_num_rows($result);
if ($num_rows > 0) {
$row = mysql_fetch_assoc($result);
$dbScore = (int)$row["score"];
$unityScore = (int)$score;
if($unityScore > $dbScore) {
mysqli_query($mysqli,"UPDATE highscores SET score=$score WHERE name=$name;") or die("Could not update table");
echo("0");
}
}
else {
mysqli_query($mysqli,"INSERT INTO highscores(name,score) VALUES('$name','$score');") or die("Could not insert data. Please choose other name.");
echo("1");
}
?>
我的问题是,每次我尝试更新表时,它总是返回我:“无法更新表”。我尝试了100种方法来使其工作,但我没有成功。只是if($ unityScore> $ dbScore){}语句中的所有内容始终崩溃,其余代码可以正常工作。因此,经过数小时的调试,我不得不将其发布。谢谢您的帮助!
答案 0 :(得分:1)
如果我对您的理解正确,则以下语句失败:
mysqli_query($mysqli,
"UPDATE highscore
SET score=$score
WHERE name=$name;"
) or die("Could not update table");
看起来name
字段是varchar(因为您在上一个查询中对它使用LIKE):如果是这种情况,则需要将值括在单引号之间,例如:
mysqli_query($mysqli,
"UPDATE highscore
SET score=$score
WHERE name='$name'"
) or die("Could not update table : " . mysqli_error($mysqli));
为避免此类问题,您应该使用prepared statements with bind parameters。
您的代码存在其他问题:
mysql
and mysqli
APIs,例如您正在使用mysql_fetch_assoc
。您应该在各处使用mysqli
API。