Php Wordpress WPDB和Mysql奇怪的行为

Php Wordpress WPDB和Mysql奇怪的行为,php,mysql,wordpress,Php,Mysql,Wordpress,我正在使用$wpdb,下面是调用$wpdb->update的代码的一部分 如果这是正常的代码,那么它工作得很好email@domain.com,但如果用户在其用户名中使用+符号,例如电子邮件+something@domain.com,wpdb不读取+符号 下面的变量来自$\u GET,但我为可读性输入了值。 $open_email = 'something+ADDITION@gmail.com'; $open_key = '2f1e4b16a9a882bbef9b00906fc5c8f563fd

我正在使用$wpdb,下面是调用$wpdb->update的代码的一部分

如果这是正常的代码,那么它工作得很好email@domain.com,但如果用户在其用户名中使用+符号,例如电子邮件+something@domain.com,wpdb不读取+符号

下面的变量来自$\u GET,但我为可读性输入了值。

$open_email = 'something+ADDITION@gmail.com';
$open_key = '2f1e4b16a9a882bbef9b00906fc5c8f563fd70a5';
$open_time = time();

if (strlen($open_key) == 40) {
    $status_update = $wpdb->update('status', 
            array(
                'invite_status' => 'opened',
                'open_time' => $open_time
                ),
            array(
                'invite_email' => $open_email,
                'invite_token' => $open_key
                ),
            array(
                '%s',
                '%d'
                ),
            array(
                '%s',
                '%s'
                )
                );
}
$wpdb->last\u查询的var dump和$wpdb->last\u error返回以下内容

字符串(235)“更新
status
SET
invite\u status
='opened',
open\u time
=1461103507,其中
invite\u email
='strong>ADDITION@gmail.com“和
评级邀请令牌”
=“2F1E4B16A9A882BBE9B00906FC5C8F563FD70A5”

我注意到上面的错误部分,用粗体突出显示,我的加号(+)消失了,留下了一个空格,导致上面的语句没有更新

我能知道我遗漏了什么吗

更新:我这样问是因为一些Gmail用户确实使用+符号将他们的电子邮件分类为用户名+anything@gmail.com仍然可以追溯到username@gmail.com


如果有什么我应该做的消毒,但我错过了,请也指导我。我认为所有$\u GET数据都应该被清理。

删除加号的不是wpdb或MySQL

在引擎盖下,当你像那样调用update时,WordPress只传递数据,其他什么都不传递

由于您提到数据来自查询字符串
$\u GET
,因此很可能在查询之前删除了
+
,因为它未被转换,并且
+
正在转换为一个空格

您可以通过以下方式进行检查:

$open_email = $_GET['email'];
var_dump($open_email);
看看结果如何

为了恢复积极性,在所有消毒和清理之后,应安全地执行以下操作:

$open_email = str_replace(' ', '+', $open_email);

哦,是的,你说得对!我可以假设这是一个常见问题,str_replace(“,+”,$open_email);在使用电子邮件字符串获取后,是否需要执行一个常见步骤?是和否,如果您真的希望
+
成为加号,URL应该从源代码正确地进行十六进制编码,例如
http://example.com?email=something%2bADDITION%40gmail.com&open_key=xxx
URL中的
+
是空间的特殊编码,如果要实际表示
+
,请将其十六进制编码为
%2b