将数据库值存入下拉列表时页面冻结无报错问题求助
问题诊断与修复方案
先揪出你代码里的核心错误——你调用mysql_num_rows()时传错参数了!你写的是mysql_num_rows($query),但这个函数需要传入查询返回的结果集(也就是mysql_query()得到的$result),而不是SQL字符串本身。
这个错误会让mysql_num_rows()返回false,你的if条件false>0永远不成立,循环代码根本不会执行。但页面冻结的问题,大概率是因为你没正确处理数据库连接,或者mysql_query()执行失败后没有错误捕获,导致PHP进程卡住(比如数据库连接超时却没设置超时机制)。
另外还有几个必须注意的点:
- 你现在用的
mysql_*系列函数已经被PHP彻底废弃了,不仅不安全,新版本PHP里直接没法运行,建议尽快切换到mysqli或者PDO。 - 你的
<option>的value写死成了owner1,这明显是失误吧?应该用数据库里的对应值,比如$row['benutzername']或者用户ID。
给你两种修复方案,先给临时过渡的mysql版本,再推荐更安全的mysqli版本:
修复后的mysql版本(仅临时过渡使用)
<div class="input-field col-md-12"> <?php // 先确保你已经完成数据库连接,示例: // mysql_connect('localhost', '你的用户名', '你的密码'); // mysql_select_db('你的数据库名'); echo "<select name='pcID'>"; $query = "SELECT benutzername FROM benutzer"; $result = mysql_query($query); // 修正参数,同时先判断$result是否有效 if($result && mysql_num_rows($result) > 0){ while($row = mysql_fetch_array($result)){ // 把value改成数据库中的实际值,而非固定的owner1 $username = htmlspecialchars($row['benutzername']); echo "<option value=\"$username\">$username</option>"; } } else { // 增加默认提示选项 echo "<option value=''>暂无可用用户</option>"; } echo "</select>"; ?> </div>
推荐的mysqli版本(更安全、更适配现代PHP)
<div class="input-field col-md-12"> <?php // 建立mysqli数据库连接 $conn = mysqli_connect('localhost', '你的用户名', '你的密码', '你的数据库名'); if(!$conn){ die("数据库连接失败: " . mysqli_connect_error()); } echo "<select name='pcID'>"; $query = "SELECT benutzername FROM benutzer"; $result = mysqli_query($conn, $query); if($result && mysqli_num_rows($result) > 0){ while($row = mysqli_fetch_assoc($result)){ // 用htmlspecialchars转义输出,防止XSS攻击 $username = htmlspecialchars($row['benutzername']); echo "<option value=\"$username\">$username</option>"; } } else { echo "<option value=''>暂无可用用户</option>"; } // 释放结果集并关闭连接 mysqli_free_result($result); mysqli_close($conn); echo "</select>"; ?> </div>
额外小建议:
- 开启PHP错误提示能快速定位问题,在代码开头加
error_reporting(E_ALL); ini_set('display_errors', 1);就行。 - 永远不要直接输出数据库里的内容,用
htmlspecialchars()转义,避免XSS攻击。
内容的提问来源于stack exchange,提问作者CallMeLeonardo
相关产品推荐
相关产品推荐

