间隔($id)不匹配数据库中的id


intval($id) not matching id in database

我的更新查询不能与变量$id一起工作,但是当我使用文字数字29时确实工作,例如。我有var_dumps $id,我得到INT(29)。由于我复制了过去有效的代码,最近是否发生了一些变化?

$id = (ISSET($_GET['id'])) ? intval($_GET['id']):0;//prevents sql inject
var_dump($id);

我的查询工作如下:

$sqlUpdate = $db->query("UPDATE sites SET site_name='$site_name',population='$population' WHERE id=29");

这个查询不起作用:

$sqlUpdate = $db->query("UPDATE sites SET site_name='$site_name',population='$population' WHERE id=$id");

我找到了问题/答案。我在表单中使用<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">,因为处理表单帖子的代码位于同一个文件中。在点击"UPDATE"后,我注意到地址栏中的文件名是正确的,但它暂时放弃了GET变量。这时,下面的代码再次运行…

$id = (ISSET($_GET['id'])) ? intval($_GET['id']):0;
$id = protect($db,$id);

和变量$id从正确的GET值更改为0,从而阻止我的代码更新正确的记录。我将代码修改为:

<form method="post" action=""> 

和一切更新完美。如果有人愿意解释一下为什么会这样,我将非常感激。