我是一名业余程序员,创建了一个基于PHP的在线门户,该门户将针对MMO型游戏更新MySQL数据库中的值,在该数据库中,我们正在使用门户跟踪每个用户保护的地砖的总数。
我正在处理脚本,该脚本将通过$ _POST数组提交HTML表单后,更新给定类型的受保护土地的表计数。
所讨论的MySQL表(players
)具有四个相似的字段(以及其他字段):
在HTML表单上,用户可以在提交时选择一种土地类型,然后脚本尝试执行连接字符串以完成该字段,然后在准备好的SQL查询中为占位符提供此字符串,例如:
//Set land type string
$landtype = $_POST['landtype'] . '_count';
//Process ADD request
if (!isset($_POST['negative']))
{
$action = 'ADDED'; //This is for a transaction report further down in the code
try
{
$sql = 'UPDATE players SET
`:landtype` = `:landtype` + :tiles WHERE id = :id';
$query = $link->prepare($sql);
$query->bindValue(':landtype', $landtype);
$query->bindValue(':tiles', $_POST['tiles']);
$query->bindValue(':id', $_POST['player']);
$query->execute();
}
catch (PDOException $e)
{
$error = 'Error updating land count: ' . $e->getMessage();
include './includes/error.inc.php';
exit();
}
...more code follows...
尝试使用以下代码发布表单时,出现以下错误:
更新土地计数时出错:SQLSTATE [42S22]:找不到列:1054“字段列表”中的未知列“ city_count”
(我已经city
在表单示例中选择了)。
我尝试了相同的代码,除了在占位符周围没有反引号:landtype
(即$sql = 'UPDATE players SET :landtype = :landtype + :tiles WHERE id = :id';
),并且遇到了另一个错误:
更新土地计数时出错:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;可能有错误。检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第2行的“ city_count” =“ city_count” +“ 300” WHERE id =“ 1”附近使用
我不确定该如何进行。通过创建串联字符串来设置字段值的尝试是否会在此处将其破坏?
不要像绑定值那样尝试绑定列名:
$sql = 'UPDATE players SET `'.$landtype.'` = `'.$landtype.'` + :tiles WHERE id = :id';
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句