为何while循环中$car_result1->car_gear输出前后不一致?
问题分析:为何car_gear字段值从"stick"变成了"Auto"?
先把你的代码片段贴出来,方便定位问题:
while($car_result1 = mysqli_fetch_object($car_connect1)){ <div class="portfolio all" data-cat="all"> <? echo $car_result1->car_gear; ?> // 输出为stick <img alt="Ay <?php if($car_result1->car_gear='auto'){ echo "Auto"; } else { echo "Stick"; }; ?> "> <? echo $car_result1->car_gear; ?> // 输出为Auto }
核心原因:混淆了赋值运算符与比较运算符
你在img标签的alt属性判断里写了:
if($car_result1->car_gear='auto')
这里的=是赋值运算符,它的作用是把右边的'auto'直接赋值给左边的$car_result1->car_gear,而不是判断两者是否相等。
具体执行流程是:
- 第一次输出
$car_result1->car_gear时,它还是从数据库读取的原始值stick; - 执行
if($car_result1->car_gear='auto')时,PHP先完成赋值操作(把'auto'存进$car_result1->car_gear),然后判断这个赋值表达式的结果——非空字符串'auto'在布尔判断里为true,所以会执行echo "Auto"; - 此时
$car_result1->car_gear已经被修改为'auto',所以后面的输出自然变成了auto(你的注释写的Auto应该是笔误,实际输出是赋值后的auto)。
修正方案
把赋值运算符改成比较运算符即可:
- 若只需比较值(不严格检查类型),用
==; - 若要严格比较值和类型(推荐,避免隐式类型转换的坑),用
===。
修正后的代码:
while($car_result1 = mysqli_fetch_object($car_connect1)){ <div class="portfolio all" data-cat="all"> <? echo $car_result1->car_gear; ?> // 输出为stick <img alt="Ay <?php if($car_result1->car_gear === 'auto'){ echo "Auto"; } else { echo "Stick"; }; ?> "> <? echo $car_result1->car_gear; ?> // 输出还是stick }
这样既不会修改原始字段值,两次输出都会保持数据库里的stick,同时alt属性也能正确显示Stick。
内容的提问来源于stack exchange,提问作者Mamas Plodos
相关产品推荐
相关产品推荐

