更新由php字符串确定的mysql行

时间:2014-07-05 00:52:39

标签: php mysql mysqli

大家好我遇到的问题是我无法使用由字符串确定的php更新mysql行。无效的代码在

下面
mysqli_query($con1,"UPDATE Complete SET  $GameName = '5'
WHERE Username='$UserInfo[0]'");

但是这段代码可以看到我想要设置的行如何更改

mysqli_query($con1,"UPDATE Complete SET  rowname = '5'
WHERE Username='$UserInfo[0]'");

我已经尝试在$ Gamename周围加单引号无济于事。并且由于未知原因,不能将行名称放在引号中。 更新: 我试图得到一个错误日志,但调试器没有识别任何问题,所以尝试帮助我将发布另一个不起作用的例子,但将有助于确定$ UserInfo [0]不是问题。

mysqli_query($con1,"UPDATE Complete SET  $GameName = '5'
WHERE Username='beta'");

另外,为了排除变量$GameName之类的问题我测试下面的代码无效。

$Column="Addition";
mysqli_query($con1,"UPDATE Complete SET   $Column= '5'
WHERE Username='beta'");

但是下面的代码可以正常工作

mysqli_query($con1,"UPDATE Complete SET   Addition= '5'
WHERE Username='beta'");

5 个答案:

答案 0 :(得分:1)

我认为你需要在MySQLi上学习一些东西。你使用它的方式不合适。你应该使用准备好的陈述。通过看看你如何获得第一个查询,你不必将列名指定为变量,但也许你的问题出在哪里?

它应该类似于下面,但正如我之前所说,你不应该使用变量指定列名。

if ($stmt = $con1->prepare("UPDATE Complete SET ".$GameName." = '5' WHERE Username=?")) {
    $stmt->bind_param('s', $UserInfo[0]);
    $stmt->execute();
    $stmt->close();
}

答案 1 :(得分:0)

可能你的问题是报价。所以你可以尝试一些这种逃避方式:

mysqli_query($con1,"UPDATE Complete SET  `".$GameName."` = '5' WHERE Username='".$UserInfo[0]."'");

OR

mysqli_query($con1,"UPDATE Complete SET  `{$GameName}` = '5' WHERE Username='{$UserInfo[0]}'");

顺便说一下,你的代码非常容易受到sql注入。

请参阅HOW TO PREVENT SQL INJECTION IN PHP

答案 2 :(得分:0)

我真的不认为问题出在$ GameName上......你可以试试这个

$sql = "UPDATE Complete SET  ".$GameName." = '5'
WHERE Username='".$UserInfo[0]."'";

mysqli_query($con1, $sql);

我认为问题在于$ UserInfo [0]。

答案 3 :(得分:0)

尝试echo结果SQL并将查询运行到您的实际database GUI(使用navicat或其他内容)。我认为您的$GameName值不能是数据库中的有效列。由于您使用的是动态列名称,因此您应该考虑验证您的列:

$array_columns = array('column_1', 'column_2', 'name', 'other_col');
if (in_array($GameName, $array_columns)) {
    mysqli_query($con1,"UPDATE Complete SET $GameName = '5'
        WHERE Username='$UserInfo[0]'");
}

答案 4 :(得分:-1)

这是解决我的问题的代码问题是我需要在尝试处理它之前创建我的语句,我的一个表列(我试图编辑的那个)不会编辑所以我不得不删除它然后重新创建它。

$Query="UPDATE Complete SET  " .$UserInfo[9] . "='1' WHERE Username='" . $UserInfo[0] . "'";
mysqli_query($con1,"$Query");