我正在使用$wpdb,以下是调用$wpdb- update的代码的一部分.如果使用普通的email@domain.com,但如果用户要使用其用户名登录,则此代码效果很好.电子邮件something @ domain.com,wpdb不会读取该标志下面的变量来自$_G...
我正在使用$wpdb,以下是调用$wpdb-> update的代码的一部分.
如果使用普通的email@domain.com,但如果用户要使用其用户名登录,则此代码效果很好.电子邮件something @ domain.com,wpdb不会读取该标志
下面的变量来自$_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_query和$wpdb-> last_error的var dump返回以下内容.
字符串(235)“更新状态设置vital_status =’已打开’,open_time = 1461103507,其中invit_email =’东西ADDITION@gmail.com’且rating_invite_token =’2f1e4b16a9a882bbef9b00906fc5c8f563fd70a5’”
我注意到上面的错误部分以粗体突出显示,我的加号()消失了,并且留了一个空格,导致上述语句不更新.
我可以知道我错过了什么吗?
更新:我之所以问是因为gmails的某些用户的确使用该符号对电子邮件进行了分类,因为用户名“ anything@gmail.com”仍然返回到“ username@gmail.com”
如果我应该进行任何卫生处理,但我错过了,请也指导我.我认为所有$_GET数据都应该被清除.
解决方法:
不是wpdb或MySQL删除了加号.
在幕后,当您这样调用update时,WordPress会通过mysqli_real_escape_string()传递数据,而没有其他任何传递.
既然您提到数据是来自查询字符串$_GET的,那么很可能在查询之前将其删除了,因为我们已经对其进行了转义并且将其转换为空格.
您可以使用以下方法进行检查:
$open_email = $_GET['email'];
var_dump($open_email);
看看结果如何.
为了获得加分,经过所有清理和转义后,应该安全地执行以下操作:
$open_email = str_replace(' ', '+', $open_email);
本文标题为:WordPress的WPDB和MySQL的奇怪行为
基础教程推荐
- dedecms织梦无需登录注册可下单购买的修改 2022-11-04
- pbootcms二次开发必须要了解的后台目录结构 2023-07-09
- 织梦dedecms调用当前栏目文章数的方法 2022-11-08
- dedecms织梦cms常用判断语句汇总 2022-06-24
- 织梦dedecms如何在dede:sql中使用[field:global.autoindex/] 2022-08-27
- 织梦DedeCMS搜索指定多个栏目文档的办法 2022-11-11
- dedecms根据来访IP区域自动跳转对应页面的方法 2022-07-21
- PbootCMS网站标题描述等标签限制字数的办法 2023-07-08
- dedecms织梦全局变量调用方法总结 2023-07-08
- pbootcms网站自动清理runtime缓存方法 2023-07-09