【问题标题】:PHP MySQL Query doesn't work, but works from terminalPHP MySQL Query 不起作用,但可以从终端工作
【发布时间】:2010-09-23 14:24:25
【问题描述】:

这是我的代码:

$gid = (int) stripslashes($_POST['id']);
echo $gid;

$db = dbConnect(); $test = $db->query('update games set played = played + 1 where id = "$gid"'); echo $db->error; echo $db->errno; die(); }

它在终端上运行良好,并且正确打印出 $gid,并且没有返回错误。我错过了一些非常明显的东西吗?

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    您将查询用单引号引起来。并且在单引号中不会发生变量插值(也称为替换)。

    简单示例:

    $who = 'harry potter';
    echo 'hi "$who"'; // prints hi "$who"
    echo "hi '$who'"; // prints hi 'harry potter'
    

    将代码更改为:

    $test = $db->query("update games set played = played + 1 where id = '$gid'");
    

    同样来自以下行:$gid = (int) stripslashes($_POST['id']); 很明显,$gid 是一个整数,不需要在查询中将其括在引号中。所以我们有:

    $test = $db->query("update games set played = played + 1 where id = $gid");
    

    【讨论】:

    • gid 是一个 INT;根本不需要引号,但是如果转换没有失败,MySQL 会隐式地将字符串转换为 INT。
    • 非常感谢!!!我的其他查询用单引号括起来,但其中没有 PHP 变量。
    【解决方案2】:
    $test = $db->query("UPDATE `games` SET `played` = `played` + 1 WHERE `id` = '" . $gid . "'");
    

    【讨论】:

      【解决方案3】:

      单引号中的任何内容都不会被解析。做id="' . $gid . '"

      或者将整个内容用双引号括起来,并在 $gid 周围加上单引号。

      【讨论】:

        【解决方案4】:

        试试

        $test = $db->query
        ("
            UPDATE `games` 
            SET
               `played` = (`played` + 1)
            WHERE `id` ='" . $gid . "'
        ");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-08
          • 1970-01-01
          • 2017-08-23
          • 1970-01-01
          • 2012-06-12
          • 2020-02-27
          • 2014-06-25
          • 1970-01-01
          相关资源
          最近更新 更多