每当我放置一个'在更新数据库的页面上的文本中
$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";
当它切断并最终将文本扔进代码中时。
有没有办法可以安全地添加这样的东西,我知道我可以使用'但是当它在页面中显示回来时它返回为'每次我都要更新它们。否则就是错误。
感谢。
答案 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。