更新SQL查询显示成功但表中没有任何更新

时间:2014-01-02 20:46:51

标签: php mysql sql sql-update

我有以下php代码,它使用从表单发布的已编辑数据更新sql表:

$user_input_id = $_POST['id'];
$user_input_abc = $_POST['abc'];
$user_input_def = $_POST['def'];
$user_input_xyz = $_POST['xyz'];

$sqlTable = 'abc_table';
$stmt = $mysqli->prepare("UPDATE $sqlTable SET abc=?, def=?, xyz=? WHERE id=?");
$rc = $stmt->bind_param("sssi", $user_input_abc, $user_input_def, $user_input_xyz, $user_input_id);

$stmt->execute();

echo 'Your information was updated to the database.';

$stmt->close();
$mysqli->close();

当我编辑表单并提交更改时,带有上述脚本的php页面显示"您的信息已更新到数据库。"但是当我检查数据库时,编辑没有更新,它仍然显示旧数据。

我还尝试回显像echo $user_input_id, $user_input_abc, $user_input_def, $user_input_xyz;之类的变量,以确保变量确实具有从上一页中的from发布的编辑文本,并且它们看似正确。它只是认为显示成功的更新查询不是更新我的sql表中的编辑文本。

我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

导致问题的是$_POST['id']。将ID传递给此update.php文件的上一个表单页面为<input type="hidden" name="id" value="<? echo $id ?>" />而不是<input type="hidden" name="id" value="<?php echo $id ?>" />。我在php之后错过了<?。因此,发布的ID为空。我确实对prepare() failedbind_param() failedexecute() failed进行了错误检查(虽然我只显示了上面的简短代码而没有错误检查行),但它仍然显示任何错误并且查询显示一样成功。这是由于空id字段引起的,因此查询成功并且didint显示任何错误,但由于id为空,因此表中的行没有更新。一旦我确保id被正确发布,其他一切都有效。 (愚蠢的错误让我头疼)

感谢大家的意见,帮助我注意到我的错误。