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

时间:2016-10-11 17:30:48

标签: php mysqli

我的更新查询无法使用我的变量$ id但是当我使用文字数字29时,它确实有效。我有var_dumped $ 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");

1 个答案:

答案 0 :(得分:0)

我发现了我的问题/答案。我在表单中使用了<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=""> 

并且一切都完美更新。如果有人想解释为什么会发生这种情况,我将非常感激。