php中的mysqli查询每次执行时都会失败

时间:2018-12-31 21:10:28

标签: php mysql

我的问题如下:我向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){}语句中的所有内容始终崩溃,其余代码可以正常工作。因此,经过数小时的调试,我不得不将其发布。谢谢您的帮助!

1 个答案:

答案 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

您的代码存在其他问题:

  • 您应该始终打印SQL错误,而不是常规消息(请参阅更新的代码)。
  • 您最好避免在运行于mysqli下的SQL语句中添加结尾分号,例如their use is officially discouraged;我也更新了那部分代码
  • 您是mixing mysql and mysqli APIs,例如您正在使用mysql_fetch_assoc。您应该在各处使用mysqli API。