使用php中的变量更新int列

Muh*_*mar 2 php sql prepared-statement

我正在使用以下查询

$abilityPts = xxx;
$statement = $conn->prepare('UPDATE players SET ability = (ability + $abilityPts) WHERE id = :myPlayerId');
Run Code Online (Sandbox Code Playgroud)

但是它给出了误差..

$abilityPts column not found
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

{"error":"SQLSTATE[42S22]: Column not found: 1054 Unknown column '$abilityPts' in 'field list'"}
Run Code Online (Sandbox Code Playgroud)

kap*_*apa 6

  1. 您正在使用预准备语句.所以使用预备语句.使用:abilityPts和绑定$abilityPts的方式与绑定方式相同:myPlayerId.

    $conn->prepare('UPDATE players SET ability = (ability + :abilityPts) WHERE id = :myPlayerId');
    
    Run Code Online (Sandbox Code Playgroud)

    通过连接创建SQL查询并在字符串中嵌入PHP变量是一种非常糟糕的做法,它可以使您的代码对SQL注入开放,这是一项严肃的业务.准备好的陈述更清晰,更安全,并且通常被社区认为是最佳做法.如果您已经在使用准备好的语句,那么表现很好,只需继续使用它们即可.

  2. 你应该做我在1.中描述的内容,但也要注意PHP 之间'和之间的区别".

    ' (单引号):

    与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号字符串中出现时不会被扩展.

    这基本上意味着以下内容:

    $a = 15;
    echo 'My favorite is $a.'; //My favorite is $a.
    echo "My favorite is $a."; //My favorite is 5.
    
    Run Code Online (Sandbox Code Playgroud)

    有关详细信息,请阅读有关字符串PHP手册.