【问题标题】:Inserting a HTML file in a MySQL using PHP query使用 PHP 查询在 MySQL 中插入 HTML 文件
【发布时间】:2016-08-11 17:43:38
【问题描述】:

我有一个这样的heredoc变量:

$status=<<<EOT
<p>hello world</p>
<p>I'm <strong>really</strong>OK!</p>
<p></p>
EOT;

我想通过 PHP 将它插入到我的 MySQL 数据库中,如下所示:

query="INSERT INTO requests (ID,title) VALUES ('$ID','$status')";

但我做不到。我应该怎么做才能被允许插入?

【问题讨论】:

  • SQL 转义?有任何错误信息吗?结果究竟有何不同?是否与 HTML 上下文中未显示的换行符有关?
  • 您的文本中有一个撇号,这会混淆数据库。请改用准备好的语句。

标签: php mysql heredoc


【解决方案1】:

您可以通过两种方式做到这一点:

像这样使用mysqli_real_escape_string()

$mydb = new mysqli("localhost","root","FedAnd11");

$status=<<<EOT
<p>hello world</p>
<p>I'm <strong>really</strong>OK!</p>
<p></p>
EOT;

$query="INSERT INTO requests (ID,title) VALUES ('$ID','".$mydb->real_escape_string($status)."')";

或者如果你还没有数据库连接,

$status=<<<EOT
<p>hello world</p>
<p>I'm <strong>really</strong>OK!</p>
<p></p>
EOT;

$status = str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $status);

$query="INSERT INTO requests (ID,title) VALUES ('$ID','$status')";

如果我理解你的问题。

您可以做的另一件事是使用 mysql 准备好的语句,如果您真的想按原样放置 $status,如下所示:

$status=<<<EOT
<p>hello world</p>
<p>I'm <strong>really</strong>OK!</p>
<p></p>
EOT;

$stmt = $dbConnection->prepare('INSERT INTO requests (ID,title) VALUES (?,?)');
$stmt->bind_param('is', $ID,$status);

$stmt->execute();

我认为 $ID 是整数。

【讨论】:

  • 我建议将准备好的语句移到顶部;在回答问题时,将他们推向最佳方法总是一个好主意。请注意,您不知道他们使用的是什么数据库 API,可能是 PDO 或古老的 mysql API。
【解决方案2】:

尝试使用 addlashes()

$status = addslashes($status);
query="INSERT INTO requests (ID,title) VALUES ('$ID','$status')";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多