此操作的背景只是我正在一个页面上,在该页面上我需要允许更新数据库中的表。但是,由于存在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为的表行=变量的值,但不返回任何结果。
答案 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);