好的,所以我再次做我的网站,我想编辑或更新行的值,所以我去了phpmyadmin并检查更新值的代码是什么,所以我有这个:
UPDATE `database`.`table` SET `title` = 'My Title', `message` = 'My Message' WHERE `table`.`id` =2 LIMIT 1 ;
所以我尝试在 PHP 上像这样改写它:
mysql_query("UPDATE posts SET title = '$title', message = '$message' WHERE id='$id' LIMIT 1");
但是当我尝试检查我的桌子时,它并没有改变。
顺便说一下,没有显示任何错误。
尝试:
mysql_query("更新帖子设置标题 = '" .$title ."' 消息 ="。$message ."' 其中 id = 2 限制 1");
您使用的是哪个版本的 PHP?
希望这能做到
mysql_query("UPDATE posts SET title = '{$title}', message = '{$message}' WHERE id={$id} LIMIT 1");
我用了这个:
mysql_query('更新帖子设置标题 ="' .$title .'",消息 = "' 。$message .'"其中 id=' .$id .' 限制 1');
你有SQL注入。这意味着消息中的单引号将中断查询。传递给查询的任何变量,无论是来自用户输入、从数据库中检索还是具有硬编码值,都必须正确转义。在您的情况下,由于您使用的是 mysql* 函数系列,因此需要mysql_real_escape_string
。但是您可以通过迁移到mysqli
(这是一个非常简单的过程)或PDO
来帮您一个忙,并使用Prepared statements
。使用预准备语句时,可以忘记转义,并将变量直接绑定到查询中的占位符。
可能你的变量中有引号,所以你得到一个错误。
您有两个解决方案:
-
使用以下语法:mysql_query("更新帖子设置标题 = '".$title."',消息 = '".$message."'其中 id='$id' 限制 1");
-
或者最好对每个变量使用标准的PHP函数"mysql_real_scape_string()"进入SQL命令,这样每个disallow字符都将以反斜杠为前缀,然后就没有问题了。
尝试
mysql_query("UPDATE posts SET title = '$title', message = '$message' WHERE id=$id");
或防止SQL注入
mysql_query(sprintf("UPDATE posts SET title = '%s', message = '%s' WHERE id=%s LIMIT 1", mysql_real_escape_string($title), mysql_real_escape_string($message), mysql_real_escape_string($id)));
您没有使用正确的文本框名称在 jQuery 或脚本中引用
请更正