如何从用户输入将撇号存储到MySQL数据库中?

时间:2014-02-11 14:35:40

标签: php mysql

我有一个简单的评论页面,用户在textarea中输入文本,点击评论按钮将评论发送到php页面:

<?php
$reply = strip_tags($_POST['reply']);
$comment_id = strip_tags($_POST['id']);
$id = strip_tags($_POST['user_id']);
$date = strip_tags($_POST['date']);
$time = strip_tags($_POST['time']);
$server_root = "./";
if(file_exists("{$server_root}include-sql/mysql.class.php"))
{
    include_once("{$server_root}include-sql/mysql.class.php");
}
include_once("{$server_root}config.php");
$db1;
$db1 = new db_mysql($conf['db_hostname'],
                    $conf['db_username'],
                    $conf['db_password'],
                    $conf['db_name']);
$db1->query("SET NAMES utf8");
$current_server_date =  date('Y-m-d H:i:s');// Your local server time
date_default_timezone_set('Asia/Istanbul');
$current_pc_date = date('Y-m-d H:i:s'); 
$sql = $db1->query(
    'INSERT INTO replies1 (reply, comment_id, date, time, timestamp, user_id) 
    VALUES ("$reply", $comment_id, "$date", "$time", "$current_pc_date", $id)');
?>

问题是:当用户输入任何带撇号的注释时,它不会将其存储在数据库中?为什么会这样?我的代码有问题吗?我添加了双引号和stripe_tags的所有内容。我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

strip_tags()似乎没必要。

相反,你应该

  • 要么适当地转义数据库输入
  • 或首先使用预先准备好的陈述。

当您在自己的类中隐藏MySQL实现时,我看不到您如何实现它们。如何逃避或准备取决于您使用的MySQL接口。

请注意,mysql_*()已弃用。你应该使用mysqli或PDO。

答案 1 :(得分:2)

你应该使用mysqli_real_escape_string()来转义直接来自用户的所有输入! 否则它不仅不能正常工作,而且对黑客攻击也非常不安全。 (MySQL的喷射)