尝试更新数值时出现语法错误(MySQL)

时间:2016-11-03 04:18:58

标签: php mysql forms syntax-error

我是一名业余程序员,创建一个基于PHP的在线门户网站,它将更新MySQL数据库中与MMO类型游戏相关的值,我们使用门户网站跟踪每个用户保护的地块总数

我正在处理脚本,该脚本将在通过$ _POST数组提交HTML表单时更新给定类型的受保护土地的表计数。

有问题的MySQL表(players)有四个相似的字段(以及其他字段):

  • wild_count
  • city_count
  • nether_count
  • END_COUNT

在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'

我不确定如何继续。通过创建连接字符串来设置字段值的尝试是否会在此处中断?

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?