我正在使用论坛类型系统让用户提出问题或说出他们的想法,我遇到了与更新数据库信息有关的问题。我不知道这里有什么问题,但我确实知道发生了什么。
某些帖子无法修改。一切都会照常发生,但不会更新数据库。有些帖子有错误的正文,但标题正确。
它没有意义,我会做一些测试来检查mysql是否正常工作......但在那之前,有什么想法吗?
更新:
此查询正在传递...但数据库未针对此特定行进行更新。这只是......
$new_body = $_POST['new_body'];
$old_body = $_POST['old_body'];
mysql_query("UPDATE questions SET body='".htmlspecialchars($new_body, ENT_QUOTES)."' WHERE body='".htmlspecialchars($old_body, ENT_QUOTES)."'") or die(mysql_error());
此外,如果有人可以启发SQL注射以及如何预防它们,我将非常感激。
列是id,pin,locked,body,date,numberofcomments(我知道我可以使用php来阅读评论量,但我在学习之前就这样做了)和视图。
更新:立即投放。将WHERE主体替换为WHERE id。愚蠢的错误。我仍然可以使用一些sql注入启发!
答案 0 :(得分:1)
正如我在评论中提到的首先使用WHERE
子句中的主键来定位表格中的特定记录,而不是使用body
列。这就是说你的更新声明应该看起来像这样
UPDATE questions SET body = ? WHERE id = ?
现在要阻止sql注入,请使用切换到mysqli_*
或PDO
扩展名并使用prepared statements而不是插入查询字符串。
使用mysqli_*
的预准备语句的代码可能看起来像
$id = $_POST['id'];
$new_body = $_POST['new_body'];
$old_body = $_POST['old_body'];
//Do validation, sanitation, and encoding if necessary here before you put into database
...
$db = new mysqli('localhost', 'user', 'password', 'dbname');
if ($db->connect_errno) {
die('Connection failed: %s\n' . $db->connect_error); //TODO better error handling
}
$sql = 'UPDATE questions SET body = ? WHERE id = ?';
$stmt = $db->prepare($sql);
if (!$stmt) {
die('Can\'t prepare: ' . $db->error); //TODO better error handling
}
$stmt->bind_param('si', $new_body, $id);
$stmt->execute();
$stmt->close();
$db-close();
进一步阅读:
答案 1 :(得分:0)
请使用Mysqli或PDO。 Mysql_ *已被弃用且不安全。
您是否尝试过检查帖子是否存在?因为这个帖子不存在或者找不到它似乎是一个问题。
你从mysql得到任何mysql_error或任何输出吗?
您是否尝试使用phpmyadmin进行更新 - 看看它是否输出任何错误?
$new_body = $_POST['new_body'];
$old_body = $_POST['old_body'];
mysql_query("UPDATE questions SET body='".htmlspecialchars($new_body, ENT_QUOTES)."' WHERE body='".htmlspecialchars($old_body, ENT_QUOTES)."'") or die(mysql_error());
我有一段时间没有使用mysql _ ,支持PDO,所以这种语法可能不正确。但你可以试试这个:*
$new_body = htmlentities($_POST['new_body']);
$old_body = htmlentities($_POST['old_body']);
$sql1=mysql_query("SELECT * FROM questions WHERE body='$old_body'") or die(mysql_error());
if(mysql_num_rows($sql1)>"0")
{
$res=mysql_query("UPDATE questions SET body='$new_body'") or die(mysql_error());
echo 'Updated';
}
else
{
//Insert.
}