遇到问题'正在输入MYSQL数据库的字符

时间:2016-01-24 21:18:44

标签: php mysql

每当我放置一个'在更新数据库的页面上的文本中

$query = "UPDATE news SET news1_title='$news1_title', news1_info='$news1_info', news1_body='$news1_body', news2_title='$news1_title', news2_info='$news2_info', news2_body='$news2_body' WHERE id=1";

当它切断并最终将文本扔进代码中时。

有没有办法可以安全地添加这样的东西,我知道我可以使用'但是当它在页面中显示回来时它返回为'每次我都要更新它们。否则就是错误。

感谢。

2 个答案:

答案 0 :(得分:2)

您无需直接接受查询的用户输入。这是一个巨大的SQL漏洞。我可以$ret = array(); try{ $mysqli = new mysqli('host', 'user', 'pass', 'db'); $stmt = $mysqli->prepare('update news set news1_title = ?, news1_info = ?, news1_body = ?, news2_title = ?, news2_info = ?, news2_body = ? where ID = 1'); $stmt->bind_param('ssssss', $news1_title, $news1_info, $news1_body, $news1_title, $news1_info, $news1_body); $stmt->execute() == true; $ret['status'] = 1; $ret['msg'] = 'Successfully updated!'; } catch (Exception $e ) { $ret['status'] = 0; $ret['msg'] = $e->message; } echo $ret['msg']; 删除您的所有信息。

相反,请考虑使用预准备语句以安全自动的方式清理数据。我们来看一下OOP实现:

if (empty($_GET)) {
        $response['code'] = 1;
        $response['status'] = $api_response_code[$response['code']]['HTTP Response'];
        $sql = "SELECT * FROM table";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
            // output data of each row
            while ($row = $result->fetch_assoc())
                    $response['data'] = $row;
        } else
            $response['data'] = NULL;
}

通过简单的准备和绑定,我们已经对我们的数据进行了清理,并且将不再面对您在上面描述的问题。

答案 1 :(得分:0)

在执行查询之前尝试转义它
像这样:

mysqli_real_escape_string($mysql, $news1_title);
mysqli_real_escape_string($mysql, $news1_info);
$query = "UPDATE news SET news1_title='$news1_title', news1_info='$news1_info' WHERE id=1";

对于您在sql查询中使用的其他每个变量。

$mysqli是mysqli连接,它是使用db host,db username,db password的var。