【问题标题】:Updating MySQL DB with PHP使用 PHP 更新 MySQL 数据库
【发布时间】:2014-01-04 14:19:15
【问题描述】:

我正在使用 foreach 循环数组并更新 MySQL 数据库。 这是我的代码

foreach($result['getHiscore'] as $highScoreType => $highScoreValues){
        $rank = $highScoreValues['rank'];
        $lvl = $highScoreValues['lvl'];
        $totalXp = $highScoreValues['totalxp'];
mysqli_query($con,"UPDATE Users SET Level("$highScoreType") = $lvl,     Xp("$highScoreType") = $totalXp,  
    WHERE UserID= '1'");

}

我试图将“级别”这个词与 $highScoreType 的内容混为一谈,我的数据库中的列标题是 Leveloverall、Xpoverall、Levelattack、Xpattack 等等,所以我打算保持 Level/Xp 标题不变只需更改密钥即可。

这对我来说看起来不错,当我使用预设值测试 sql 时,它更新得很好,但是使用变量根本不会更新。我知道变量正确地从数组中出来,因为当我将它们与 foreach 内联时,它们以正确的格式和顺序打印出来。

是我的格式问题还是我遗漏了其他东西?

【问题讨论】:

  • ("$highScoreType") 使用单引号,就像在('$highScoreType') 中一样,对另一个使用相同的引号。

标签: php mysql


【解决方案1】:

如果您回显生成的 SQL 查询,应该可以帮助您查看查询中的任何问题。

我觉得很奇怪:UPDATE Users SET Level("$highScoreType") = $lvl

不应该只是UPDATE Users SET $highScoreType = $lvl 吗?

还要注意,此类代码很容易受到 SQL 注入攻击,因此请始终警惕这些变量中可能包含的内容。

要打印查询,请执行以下操作:

$query = "UPDATE Users SET Level("$highScoreType") = $lvl,     Xp("$highScoreType") = $totalXp,   WHERE UserID= '1'"
echo $query
mysqli_query($con, $query)

【讨论】:

  • 它必须是 Level("$highscoretype") 因为列标题是 Level,然后是每一列的整体/攻击/防御等。因此,我只需要更新级别,然后更新特定技能。我将如何回应查询?
  • 为什么是括号? 'Level(overall)' 是列名还是 'Leveloverall'?
  • 这个mysqli_query($con,"UPDATE Users SET Level“是”mysqli_@JonathanCrouch
  • 是的。我在发布后大约一分钟意识到了这一点。我想我要撤退并重新阅读一些教科书......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多