WordPress中implode处理邮箱失效及带post_id的wpdb查询不生效问题
问题原因及解决方案
核心错误:SQL语句语法错误
你在拼接带条件的查询语句时,表名变量和WHERE关键字之间没有预留空格,拼接后的实际SQL语句为:
SELECT * FROM wp_offersWHERE post_id=xxx
wp_offers和WHERE直接连在一起不符合SQL语法规范,导致查询失败,无法返回对应文章ID的邮箱记录。
修复方法
将查询语句修改为以下写法,补全空格同时增加SQL注入防护:
// 补全空格的同时使用参数绑定避免SQL注入风险 $retrieve_data = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $table_name WHERE post_id = %d", $id ) );
这里用$wpdb->prepare做参数绑定,用%d占位符对应整数类型的post_id,避免恶意构造的参数导致数据库安全问题。
其他可优化点
- 钩子参数使用错误:
pre_post_update钩子触发时传入的第一个参数就是文章ID,不需要调用get_the_ID( $post->ID ),且get_the_ID()本身不需要传入参数,原写法会导致获取的文章ID可能不准确。 - 最初
implode()使用错误:implode()要求第二个参数是数组,你之前直接传入单个邮箱字符串肯定无法正常工作,后续先把所有邮箱存入数组再拼接的写法是正确的。
内容的提问来源于stack exchange,提问作者Sanad
相关产品推荐
相关产品推荐

