【问题标题】:Query fails randomly whilst inserting with PHP mcrypt使用 PHP mcrypt 插入时查询随机失败
【发布时间】:2014-03-15 23:57:03
【问题描述】:

把我的头撞到墙上。但我使用的是utf8_general_ci 编码,类型是tinyblob in a MySQL DB

我在行 uname、pwrod 和 email 上使用Mcrypt,如插入中所示。有时这会插入,其他则不会。这显然取决于用于生成加密的字符串。

这是我的插入

INSERT INTO `users` ( `uname` , `pword` , `email` , `gender` , `provider` , `level` , `dob` , `confirmed` , `regdate` , `confirmationCode`, `ip` ) 
VALUES ('“­É.¡Ec', '$2a$15$3G.7Pfap0dfWnEZxVPKWjewcLUA6tYm7a1al6I0QNZUCNcdl6E6Mu', 'ðÖŒÅÕ'Ý£mY]ª±¼ ôn´}Ð>d¢', '0','manual', '0', '2014-02-16', '0',NOW(), 'f5ab855e95eab47948b05cfe5a03e4d6', '127.0.0.1' ); 
Error Nr: 1064 Error Msg: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Ý£mY]??? ?n?}?>d?', '0','manual', '0', '2014-02-16', '0',NOW(), 'f5ab855e95eab' at line 14 

如果我将' 更改为`,则会收到以下错误:

 Error Nr: 1300 Error Msg: Invalid utf8 character string: '\x93\xAD\xC9.\xA1E\x04c'

我假设我需要更改我的char encoding?但这是我的知识下降的地方(一般来说所有编码:))

【问题讨论】:

  • 你真的需要加密吗?
  • 很遗憾,我这样做了 :( 我正在使用的数据需要完全谨慎!糟糕的时期,但需要。
  • 如果我偷了你的数据库,我可能也有加密密钥吗?它存储在哪里?
  • 幸运的是,数据库与我的 php 位于不同的服务器上 :)

标签: php mysql encoding mcrypt


【解决方案1】:

您正遭受SQL injection attack 漏洞的困扰:

  [..snip..], 'ðÖŒÅÕ'Ý£mY]ª±¼ ôn´}Ð>d¢',[..snip..]
              ^--start string
                    ^---end string

您正在错误地构建您的查询 - 要么没有将您要填充的数据转义到查询字符串中,要么没有使用您的数据库库的准备好的语句/占位符功能。

【讨论】:

  • 很好,实际上很明显,谢谢。我会在那里快速旋转一下帽子。可怜的婴儿桌! Marc 的一个问题是,如果我转义 ',这是否意味着我必须在解密时删除它们?
  • 关于转义字符串问题 marc/的任何想法
  • 对不起,马克,但我似乎仍然有问题。我确实相信我已经修好了。所以我要逃跑。至于准备好的陈述,我承认我不知道这些是什么。除了谷歌搜索任何指针?
猜你喜欢
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2016-06-21
  • 2014-11-01
  • 1970-01-01
相关资源
最近更新 更多