我是一名业余程序员,创建一个基于PHP的在线门户网站,它将更新MySQL数据库中与MMO类型游戏相关的值,我们使用门户网站跟踪每个用户保护的地块总数
我正在处理脚本,该脚本将在通过$ _POST数组提交HTML表单时更新给定类型的受保护土地的表计数。
有问题的MySQL表(players
)有四个相似的字段(以及其他字段):
在HTML表单上,用户可以在提交时选择一个land类型,脚本会尝试执行字符串连接以完成该字段,然后在准备好的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服务器版本相对应的手册,以便在''city_count'='city_count'附近使用正确的语法+ +'300'在第2行WHERE id ='1'
我不确定如何继续。通过创建连接字符串来设置字段值的尝试是否会在此处中断?
答案 0 :(得分:0)
请勿尝试绑定列名称,因为它是一个值:
$sql = 'UPDATE players SET `'.$landtype.'` = `'.$landtype.'` + :tiles WHERE id = :id';
Can PHP PDO Statements accept the table or column name as parameter?