我的 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 来使应用程序工作。
谢谢。