Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在保留换行符的MySQL中存储和检索文本数据?_Php_Mysql_Filter - Fatal编程技术网

Php 如何在保留换行符的MySQL中存储和检索文本数据?

Php 如何在保留换行符的MySQL中存储和检索文本数据?,php,mysql,filter,Php,Mysql,Filter,如何从textarea存储和检索MySQL数据库中的数据,但保留换行符?在用户不能执行跨站点脚本或SQL注入攻击的情况下,我如何以最安全的方式执行此操作 我是否应该首先通过mysql\u real\u escape()函数过滤用户的输入数据,然后将插入到数据库中,然后在检索时使用htmlspecialchars()函数 我只是想知道如何安全地存储数据并保留换行符。我希望有人能给我举个这样的例子: <?php $con = mysql_connect(host,username,pa

如何从
textarea
存储和检索MySQL数据库中的数据,但保留换行符?在用户不能执行跨站点脚本或SQL注入攻击的情况下,我如何以最安全的方式执行此操作

我是否应该首先通过
mysql\u real\u escape()
函数过滤用户的输入数据,然后将
插入到数据库中,然后在检索时使用
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)
,以使查询异常检查更容易)


对于初学者来说,
{$content}
没有引号。如果你想知道你的例子是否正确,你应该继续测试它。offtopic:不要使用
mysql.*
函数-它们不推荐使用。更好地使用
PDO
(或
mysqli.*
)和准备好的状态说明。
echo nl2br($text->content)旁注:如果在选择一行之前插入两行(考虑并发请求),则执行
SELECT
并基于
time DESC
进行排序不会得到预期的结果。
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']);
}