【问题标题】:UPDATE Query in MySQL using WHERE使用 WHERE 在 MySQL 中更新查询
【发布时间】:2011-11-24 17:07:20
【问题描述】:

我正在运行以下 UPDATE 查询但没有成功:

$sql="UPDATE users SET firstname='".$_GET['fn']."',lastname='".$_GET['ln']."',email='".$_GET['emadd']."' WHERE id = ".$_GET['id'];

mysql_error();不返回错误,但我确定这是语法问题。

如果您能帮我清理这个问题并提供解释以帮助我了解哪里出错了,我们将不胜感激!

为了给出更大的参考,这里是建表代码:

$sql="CREATE TABLE users
(
id int NOT NULL auto_increment,
PRIMARY KEY(id),
firstname varchar(20),  
lastname varchar(20),
email varchar(40)
)";

这是我 updater.php 中的完整代码,它在表上运行更新查询:

mysql_select_db(dustin,$con);
$sql="UPDATE users SET firstname='".$_GET['fn']."',lastname='".$_GET['ln']."',email='".$_GET['emadd']."' WHERE id = ".$_GET['id'];
$sherlock=mysql_query($sql,$con);

echo $sql 返回以下内容:

UPDATE users SET firstname='Mike',lastname='Wilson',email='mike@eyeball.com' WHERE id = 

这是否意味着我的 id 没有被传递?

要查看它的实际效果,请转到 24.77.236.155/dustin/Assignment2/users.php 并单击编辑以使用查询。此外,24.77.236.155/dustin/Assignment2/add.htm 可用于将用户添加到表中。

【问题讨论】:

  • 打印出sql,这样更容易调试。此外,您应该使用绑定变量 - 这很容易受到 SQL 注入的影响。
  • ."' WHERE id = ".$_GET['id'];."' where id='" . $GET['id] . "'";
  • 你说mysql_error没有返回错误...mysql_query返回true还是false?
  • 如果 id 是整数,则不需要引号
  • 我知道这是题外话,我可能会对此投反对票。但@DustinJames ---将您的$_GET 变量数据直接放入查询中是其中之一如果您不验证这些值的内容,您可以对您的网站做的最危险、有害、不安全的事情---我希望您能对此做点什么.. [爆发原因] -> @987654321 @ :(

标签: php mysql


【解决方案1】:

查询似乎很好,我假设它没有更新表?

对此进行调试的一种方法是在下一行中回显 $sql,以查看您收到的 GET 变量值以及传递给数据库的实际查询。

echo $sql;

【讨论】:

  • echo $sql 结果如下: UPDATE users SET firstname='Mike',lastname='Wilson',email='mike@eyeball.com' WHERE id = 是不是说我的id不是被通过了?
  • @DustinJames 你不能在浏览器的地址字符串中看到它吗?
  • 是的,只是一个没有通过的 id,创建了一个隐藏的表单元素,它可以工作,谢谢,我会一直盯着它,一直以为它是语法。我将不得不记住回显我的 sql 语句。
【解决方案2】:

始终至少以这种方式运行所有查询

$result = mysql_query($sql,$con) or trigger_error(mysql_error(). " ".$sql); 

与这里的答案中的一些疯狂猜测不同,它会给你准确和完整的问题图片。

【讨论】:

  • 谢谢上校,我会开始做这个的。
【解决方案3】:

您缺少 where 位中的引号

...where id='" . $GET['id] . "'";

此外,您在不检查这些值的情况下使用 $GET 也会出现安全问题。

【讨论】:

  • 如果 id 是整数,则不需要引号
  • @julien - 我假设既然它不工作,那么 id 不是整数。
  • @EdHeal 如果是这种情况,mysql_error() 应该会显示语法错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2019-10-10
相关资源
最近更新 更多