我有这个查询将数据提交到数据库中:
$sql = "UPDATE table SET user='$user', name='$name' where id ='$id'";
将通过网址EX localhost/index.php?id=123
$id=$_GET['id']
查询无法正常工作;数据不会更新。 如果我写:
$sql = "UPDATE table SET user='$user', name='$name' where id ='123'";
工作正常。
如果我回复ID,它将显示正确的结果123
。
问题出在哪里?
答案 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
值?似乎您发布的代码不完整。