更新id = $ id

时间:2011-11-29 15:18:37

标签: php mysql sql

我有这个查询将数据提交到数据库中:

$sql = "UPDATE table SET user='$user', name='$name' where id ='$id'";

将通过网址EX localhost/index.php?id=123

获取ID
$id=$_GET['id']

查询无法正常工作;数据不会更新。 如果我写:

$sql = "UPDATE table SET user='$user', name='$name' where id ='123'";

工作正常。

如果我回复ID,它将显示正确的结果123

问题出在哪里?

6 个答案:

答案 0 :(得分:12)

以您收到错误消息以及错误查询的方式运行所有查询 所以,至少这样

$sql = "UPDATE table SET user='$user', name='$name' where id ='$id'";
$res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);

它会告诉你问题出在哪里。

这比在这里提问更方便,更准确,更快捷。

答案 1 :(得分:5)

我猜你的问题是由于未转义的数据插值而导致的格式错误的SQL - 一个SQL注入漏洞。

您实际生成的查询是什么样的?不是创建sql的代码(你上面已经有了),但是插入变量后实际的SQL

我猜它看起来像这样:

UPDATE table SET user='fred', name='O'Brien' where id='123';
                                     ^--unescaped quote

导致语法错误。

如果你正在运行这样的查询:

$result = mysql_query($sql);

然后将其更改为

$result = mysql_query($sql) or die(mysql_error());

如果查询因任何原因失败,您将立即获得反馈。

然后阅读SQL injection个洞

答案 2 :(得分:1)

$id = $_GET['id']

<form action="#.php" method="POST">
      <input type="hidden" name="id" value="<?php echo $id?>">
</form>

然后,在PHP块中,

$id = $_POST['id'];
$sql = "UPDATE table SET user='$user', name='$name' where id ='$id'"

答案 3 :(得分:0)

没有涉及从GET数组中直接提取数据有多糟糕的问题,我首先建议您正确地逃避变量。我假设ID是一个整数,所以不需要单引号。

$sql = "UPDATE table SET user='".$user."', name='".$name."' where id=".$id;

看看是否有效。

答案 4 :(得分:0)

TableName应该在那里....你没有在查询中使用表名。回显$ sql然后尝试在phpmyadmin中执行。

答案 5 :(得分:0)

首先,如果你这样做,你会对SQL注入攻击持开放态度。任何人都可以在id =之后将部分更改为他们喜欢的任何内容并使用它修改数据库。

其次,我看到您将ID传递给脚本,但它在哪里确定$user$name值?似乎您发布的代码不完整。