Как хранить и извлекать данные из базы данных MySQL из textarea
но сохраняя разрывы строк? Как я могу также сделать это самым безопасным способом, когда пользователи не могут выполнять атаки на межсайтовый скриптинг или SQL-инъекции?
Должен ли я сначала фильтровать входные данные пользователя через mysql_real_escape()
затем INSERT INTO
в базу данных, а затем при извлечении использовать htmlspecialchars()
?
Я просто хочу знать, как безопасно хранить данные и сохранять разрывы строк. Надеюсь, кто-то может сделать мне такой пример:
<?php $con = mysql_connect(host,username,password); mysql_select_db(contents_db); //Filtering process to prevent SQL-Injection $content = mysql_real_escape($_POST['content']); mysql_query('INSERT INTO contents_db (content, time) VALUES ({$content},{time()}'); if(mysql_insert_id() > 1){ $query = mysql_query('SELECT * FROM contents_db ORDER BY time DESC LIMIT 1'); $text = mysql_fetch_object($query); //Outputting process to preserve line-breaks echo htmlspecialchars($text->content); } mysql_close($con); ?>
Если мой пример уже прав, может ли кто-нибудь показать мне, как сделать его еще лучше и безопаснее?
Это полный пример использования PDO
. Например, вы можете улучшить его разными способами (например, создать одну функцию, например getDatabaseResult($query)
чтобы упростить проверку исключений запросов).
try{ $PDO = new PDO("mysql:host=".$db_host.";dbname=".$db_name, $db_user, $db_pass); } catch(PDOException $e){ die('mysql connection error'); } // if post data is set - add new row if(isset($_POST['content'])) { try{ $query = $PDO->prepare('INSERT INTO contents_db (content, time) VALUES ?,?'); $res = $query->execute(array($content,time())); } catch(PDOException $e){ die('insert query failed'); } } // if last query was executed - select data // or you can call for "$PDO->lastInsertId();" if($res){ try{ $query = $PDO->prepare('SELECT * FROM contents_db ORDER BY time DESC LIMIT 1'); $res = $query->execute(); $res = $query->fetchAll(PDO::FETCH_ASSOC); } catch(PDOException $e){ die('select query failed'); } //Outputting process to preserve line-breaks echo nl2br($text['content']); }