有些帖子没有在数据库中更新

时间:2013-09-30 23:51:49

标签: php mysql

我正在使用论坛类型系统让用户提出问题或说出他们的想法,我遇到了与更新数据库信息有关的问题。我不知道这里有什么问题,但我确实知道发生了什么。

某些帖子无法修改。一切都会照常发生,但不会更新数据库。有些帖子有错误的正文,但标题正确。

它没有意义,我会做一些测试来检查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注入启发!

2 个答案:

答案 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.
    }