【发布时间】:2013-04-28 11:06:15
【问题描述】:
我的 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 查询失败并出现“语法错误”。经过大量的调试,其中涉及手动更改上述 php 中的 $copied 变量,我终于发现这是因为 $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' 附近使用正确的语法
关于为什么会发生这种情况的任何意见?现在,我通过在从 URL 中删除 http:// 部分后发送 URL 来使应用程序工作。
谢谢。
【问题讨论】:
标签: php javascript mysql encryption mcrypt