MySQL更新表使用变量?

时间:2019-04-09 15:30:06

标签: php mysql

此操作的背景只是我正在一个页面上,在该页面上我需要允许更新数据库中的表。但是,由于存在3个不同的表(测试1,测试2和测试3),因此该表及其传递的值必须是动态的。

变量可以很好地传递到PHP脚本,当我使用echo时,我会看到想要的值。但是,当我尝试使用这些变量进行更新查询时,它失败了,我无法弄清楚原因。

有人可以看看我的查询,并希望指出正确的方向吗?

$thetable = "testing1";
        $currenttitle = htmlentities($_GET['currenttitle']);
        $newtitle = htmlentities($_GET['newtitle']);
        $newdesc = htmlentities($_GET['newdesc']);

        echo $currenttitle;
        echo $newtitle;

        $db = mysqli_connect($servername, $user, $password);

        if (!$db)
            {
                echo"NO CONNECTION AVAILABLE";
                exit();
            }

        mysqli_select_db ($db, "testing");

        $query ="UPDATE $thetable SET TITLE= $newtitle WHERE TITLE = $currenttitle";

        echo $query;

        $results = mysqli_query($db, $query);

        if(!$results)
            {
                echo"not working";
                exit();
            }

        echo"updated";

我希望它能更新TITLE为的表行=变量的值,但不返回任何结果。

1 个答案:

答案 0 :(得分:0)

您的问题可能与查询中字符串的分配有关
但是您不应该使用php var,因为您有遭受sqlinjection的风险

相反,您应该使用prepapred sataemnet和bindig参数

确定您拥有$ thetable的受控值(在这种情况下为文字字符串)的事实,那么sqlinject不涉及该值
您可以使用

  $stmt = $db->prepare("UPDATE '" .$thetable ." SET TITLE= ? 
             WHERE TITLE = ? " );
  $stmt->bind_param('ss', $newtitle, $currenttitle); 

  $currenttitle = htmlentities($_GET['currenttitle']);
  $newtitle = htmlentities($_GET['newtitle']);

  mysqli_stmt_execute($stmt);