1

我的 Web 应用程序从客户端获取 URL 对象,使用 对其进行加密mcrypt_encrypt,并将结果作为 LONGTEXT 类型存储在 MySQL 数据库中。整个过程如下图所示:

    /* $copied below is received from user and can be any string. But I'm just using a URL as example,as that's where it fails */
    $copied = "http://www.google.com"
    $encCopied = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$encryption_key,$copied,MCRYPT_MODE_CFB);

    $copystuff = "UPDATE LinkTable set copied='$encCopied'";

    mysqli_query($db,$copystuff)

执行此代码时,最后一行的 MYSQL 查询失败并出现“语法错误”。经过大量的调试,其中涉及手动更改$copied上述 php 中的变量,我终于弄清楚它是因为$copied变量中的冒号(“:”)而发生的。当我更改$copied为 时www.google.com,不会引发 SQL 语法错误,一切正常。但是,如果我随后更改$copied:www.google.com,SQL 再次给出语法错误。

请注意,此代码适用于所有其他类型的字符串,但仅当存在冒号时才会失败。我的假设是mcrypt_encrypt将冒号加密成一些 MYSQL 无法处理的不可行的东西。

当出现冒号时,显示的错误是这样的:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'wcÀeHÿë%†‚;/æ1ÎíëO¤SÌÎúR²#•Wwðg T¥4ª¨\£%@‚y' 附近使用正确的语法

关于为什么会发生这种情况的任何意见?现在,我通过在http://从 URL 中剥离部分后发送 URL 来使应用程序工作。

谢谢。

4

1 回答 1

2

我确定某处有一个字符正在破坏 SQL。尝试转义您的加密字符串:

$copystuff = "UPDATE LinkTable set copied='" . mysqli_real_escape_string($encCopied) . "'";
于 2013-05-04T00:01:20.510 回答