【问题标题】:How do I store and retrieve a colon (:) in a MySQL field?如何在 MySQL 字段中存储和检索冒号 (:)?
【发布时间】:2025-12-06 22:20:05
【问题描述】:

我只是想在 MySQL 表中存储一个 URI。当我检索它时,“:”消失了。所以http://www.example.com 变成了 http//www.example.com 我已经研究过它并且有解决方案; (分号)、,(逗号)、引号等,但不能用于冒号。

我试过 http \ ://www.xyz.com (没有空格),但这会将它转换为 http/://www.example.com 我正在使用 php。有什么建议吗?

你真的不需要代码来理解这个问题,但由于人们坚持,甚至投反对票,这里是代码:

<?php
$id = $_GET["id"];
$conn = new mysqli($servername, $username, $password, $dbname); //security parameters not shown

$sql = "SELECT * FROM uri WHERE myURI='" . $id . "'";
$result = $conn->query($sql);
if ($result) {
    $row = $result->fetch_assoc();
    if ($row) {
        $SendTo = $row["SendTo"];
        header("Location: " . $SendTo);
    }
}
?>

注意:我没有显示插入代码,因为在这个阶段我只是手动输入 URI 来创建 POC。

【问题讨论】:

  • 您只是将 URI 存储到 db 列中吗?如果是,则在 PHP 中验证 URL 并将 URL 直接存储到字段类型为 varchartext 的列中,不要对其进行转义,只需在 php 中验证并直接存储即可。如果 url 无效,则执行上述操作将为您提供额外的 URL 检查,返回错误或正常保存
  • 我在存储 URI 时对其进行验证。这不是问题 - 当我检索 URI 时,我丢失了冒号。
  • 您必须使用addslashes() 函数进行保存。删除它。
  • 我们很想看看一些代码。
  • 我没有使用 addlashes @Norman

标签: php mysql escaping colon


【解决方案1】:

使用mysqli_real_escape_string()函数转义斜线并安全存储在数据库中

例如

$url  = "http://www.example.com";
$safeURL = mysqli_real_escape_string($url);

然后在SQL中使用$safeURLvar来存储。

【讨论】:

  • 我的问题是冒号不是斜杠。我已经尝试过这个解决方案,但它对我不起作用。
  • @Chiwda 所有符号都将用斜杠转义,使用此函数您将得到预期的结果。你测试过吗?
  • 请不要推荐mysql_real_escape_string()。如果开发人员仍在使用mysql_ 功能,那么是时候升级到mysqli_。如果他们需要转义或正在处理用户提供/不安全的数据,那么使用占位符的准备好的语句就是方法。
  • @MehulV。回到这个问题,这次使用您的解决方案有效。我有另一个错误阻止它工作。我已接受并投了赞成票。
最近更新 更多