MySQL匹配同表store_url与site_url相等时更新字段失败求助
问题原因
你代码中的SQL语句WHERE条件存在语法错误:你给site_url加上了单引号,会被MySQL识别为字符串常量,而非表的字段名。也就是说你当前的匹配逻辑是查找store_url等于字符串"site_url"的行,而非store_url和site_url两个字段值相等的行,这就是你每次都会错误更新固定不符合要求行的核心原因。
解决方法
直接去掉site_url外层的单引号即可,如果要更稳妥避免字段名和MySQL关键字冲突,可以用反引号包裹字段名,修正后的SQL语句如下:
$query_title_modal = "UPDATE widget_cont SET title_modal='$title_modal' WHERE store_url = site_url";
反引号包裹的稳妥写法:
$query_title_modal = "UPDATE `widget_cont` SET `title_modal`='$title_modal' WHERE `store_url` = `site_url`";
额外优化建议
- 你当前代码中
isset($title_modal)的判断完全冗余,经过mysqli_real_escape_string处理后的变量必然是存在的,可以直接删掉该层判断。 - 更推荐使用预处理语句替代直接拼接SQL字符串,可以彻底避免SQL注入风险,完整优化后的代码示例如下:
if(isset( $_POST['title_modal']) ){ $title_modal = $_POST['title_modal']; // 预处理SQL语句 $stmt = mysqli_prepare($conn, "UPDATE widget_cont SET title_modal = ? WHERE store_url = site_url"); // 绑定字符串类型参数 mysqli_stmt_bind_param($stmt, "s", $title_modal); // 执行语句 if(!mysqli_stmt_execute($stmt)){ echo "ERROR: " . mysqli_stmt_error($stmt); }else{ echo $title_modal; } // 释放预处理语句资源 mysqli_stmt_close($stmt); }
内容的提问来源于stack exchange,提问作者zahid3d29
相关产品推荐
相关产品推荐

