WordPress中PHP从MySQL表逐行获取优惠券代码并更新状态求助
解决MySQL优惠券获取与状态更新问题
我来帮你梳理下当前代码的问题,并给出完整的解决方案:
问题分析
你当前的实现存在两个核心问题:
- SQL查询没有过滤
adidas分类和test=0的条件,会取出表中所有数据,完全不符合你"只展示未使用优惠券"的需求 $wpdb->get_results()返回的是多条记录组成的数组,每个元素是单条数据的关联数组,直接用$kupon[adidas]根本无法正确获取优惠券代码
正确实现方案
我们需要实现"获取第一条可用优惠券→展示→标记为已使用"的完整流程,同时保证SQL操作的安全性:
1. 查询符合条件的优惠券
使用$wpdb->get_row()获取单条符合条件的记录(按优惠券代码排序,保证arda10、arda11...的顺序),同时用prepare()防止SQL注入:
// 假设你的分类字段叫kategori,优惠券代码字段叫kupon_kodu,记得替换成你表中实际字段名 $available_coupon = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM `wp_kuponlar` WHERE `kategori` = %s AND `test` = %d ORDER BY `kupon_kodu` ASC LIMIT 1", 'adidas', 0 ), ARRAY_A );
2. 展示优惠券并更新状态
如果查询到可用优惠券,就展示它,同时立即更新test状态为1,避免重复展示:
if ($available_coupon) { // 输出优惠券代码 echo $available_coupon['kupon_kodu']; // 更新该优惠券的状态为已使用 $wpdb->update( 'wp_kuponlar', array('test' => 1), // 要更新的字段和值 array( 'kategori' => 'adidas', 'kupon_kodu' => $available_coupon['kupon_kodu'] ), // 更新条件 array('%d'), // 更新值的格式(%d表示整数) array('%s', '%s') // 条件值的格式(%s表示字符串) ); } else { // 没有可用优惠券时的提示 echo "当前没有可用的adidas优惠券"; }
关键注意事项
- 务必替换代码中的字段名(比如
kategori、kupon_kodu)为你表中实际的字段名称 - 始终使用
$wpdb提供的安全方法(prepare()、update()),避免SQL注入风险 ORDER BY kupon_kodu ASC保证了优惠券按你需要的顺序被获取,如果你的排序逻辑不同,可以调整排序字段
内容的提问来源于stack exchange,提问作者Arda Ulusoy
相关产品推荐
相关产品推荐

