mysqli字符串

时间:2015-08-29 23:36:50

标签: php mysql mysqli sql-update

这是代码

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字符串中工作。

1 个答案:

答案 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()会为您提供更好的结果。