这是代码
if($_POST['submit']) {
$rid = $_GET['rid'];
$award = $_GET['award'];
$award_id = $_GET['award_id'];
$member_id = $_GET['member_id'];
$result = $mysqli->query("UPDATE ".$dbprefix."clanawards_requests SET maa_status = '3' WHERE maa_request_id = '$rid'");
$result = $mysqli->query("UPDATE ".$dbprefix."clanawards_members SET '".$award."' = '1' WHERE maa_member_id = '$member_id'");
问题出在这一行
$result = $mysqli->query("UPDATE ".$dbprefix."clanawards_members SET '".$award."' = '1' WHERE maa_member_id = '$member_id'");
准确SET '".$award."' = '1'
'".$award."'
是一个列名和一个变量,其他一切都可以工作,但这部分代码没有更新。
我需要知道的是如何让变量在这个mysqli字符串中工作。
答案 0 :(得分:3)
“列名称将为测试奖”
您必须将该列名称包装在刻度线
中SET `$award` = '1'
而不是引号,因为它包含空格。
MySQL应该抛出语法错误:(请参阅下面的错误检查方法)。
或者重命名您的列以包含下划线。
即:Testing_Award
。
不要使用连字符,因为MySQL会将Testing-Award
解释为测试减去奖励,导致语法错误,除非使用反引号。
您还应该使用准备好的声明:
您对SQL注入非常开放。
错误检查方法:
示例:
$res = $mysqli->query($result);
if ($mysqli->error) {
try {
throw new Exception("MySQL error $mysqli->error <br> Query:<br> $query", $mysqli->errno);
} catch(Exception $e ) {
echo "Error No: ".$e->getCode(). " - ". $e->getMessage() . "<br >";
echo nl2br($e->getTraceAsString());
}
}
或:
$result = mysqli_query($mysqli, $result);
if (!$result)
{
throw new Exception(mysqli_error($mysqli));
}
else{ echo "Success."; }
理想情况下,如果查询真的成功,使用mysqli_affected_rows()
会为您提供更好的结果。