PHP重复代码优化咨询:如何封装函数?是否需用while循环?
优化你的玩家查询代码:封装与安全性提升
嘿,很高兴看到你在学习编程时主动思考代码优化!咱们一步步来解决你的问题:
首先:修复SQL注入风险
你的原始代码直接把$steamprofile['steamid']拼进SQL语句里,这会带来SQL注入的安全隐患——恶意用户可以构造特殊的steamid值来篡改你的查询逻辑。正确的做法是使用预处理语句的参数绑定,让数据库自动处理变量的转义:
$sth = $conn->prepare("SELECT * FROM players WHERE pid = ?"); $sth->execute([$steamprofile['steamid']]); $result = $sth->fetch();
其次:封装为函数减少重复代码
如果这段查询逻辑在项目里多次用到,把它封装成一个可复用的函数是绝佳选择。这样你只需要维护一处代码,调用时传参就行:
function getPlayerBySteamId($conn, $steamId) { $sth = $conn->prepare("SELECT * FROM players WHERE pid = ?"); $sth->execute([$steamId]); // fetch() 只返回单条结果,适合pid是唯一主键的场景 return $sth->fetch(); } // 调用示例: $player = getPlayerBySteamId($conn, $steamprofile['steamid']); if ($player['rank'] == 11) { echo "<button style='background-color: #ad0521; width: 100px;'>你的按钮内容</button>"; }
关于while循环的疑问
你提到的while循环,是用来处理多条查询结果的场景(比如查询所有rank=11的玩家)。而你的代码是根据唯一的steamid查询单个玩家,fetch()就能拿到这条结果,完全不需要while循环。如果有需要批量获取数据的场景,才会用到类似这样的写法:
$sth = $conn->prepare("SELECT * FROM players WHERE rank = ?"); $sth->execute([11]); // 循环获取所有结果 while ($player = $sth->fetch()) { echo "<p>玩家ID:{$player['pid']}</p>"; }
额外小优化
如果你的按钮样式会多次用到,建议把CSS样式抽离到外部样式表或者<style>标签里,而不是写在inline style里,让代码更整洁:
<style> .admin-button { background-color: #ad0521; width: 100px; /* 可以加更多通用样式 */ } </style> <!-- 调用时 --> if ($player['rank'] == 11) { echo "<button class='admin-button'>你的按钮内容</button>"; }
内容的提问来源于stack exchange,提问作者Tibbe USDF
相关产品推荐
相关产品推荐

