PHP嵌套while循环无法运行 报unexpected '.'语法错误如何解决?
问题根本原因
你遇到的语法报错是因为错误地将PHP逻辑语句(数据库查询、if判断、while循环)和字符串拼接操作混写在了一起,PHP解析器无法识别中途插入的逻辑语句前后的.拼接符,才抛出了语法错误。原来的写法相当于在给$output追加字符串的过程中突然插入了独立的PHP代码,又错误地用拼接符连接逻辑语句和字符串,语法完全不成立。
修正后的可运行代码
$sql = "SELECT * FROM question where question_id={$update_id}"; $result = mysqli_query($conn, $sql) or die("query failed"); $output = ''; if(mysqli_num_rows($result) > 0){ while($question = mysqli_fetch_assoc($result)){ // 先拼接表单和select开头部分 $output .= " <form id='edit-question-form'> <div class='form-panel'> <label for='question-faculty'>Faculty:</label> <select name='faculty' id='question-faculty'> "; // 单独执行内部院系查询逻辑,不要嵌入字符串拼接链 $sql2 = 'SELECT faculty_id,faculty_name FROM faculty;'; $result2 = mysqli_query($conn, $sql2) or die('query failed'); if(mysqli_num_rows($result2)){ while($faculty = mysqli_fetch_assoc($result2)){ // 循环拼接option选项 $output .= "<option value='{$faculty['faculty_id']}' ".(($question['faculty']==$faculty['faculty_id'])?'selected':'').">{$faculty['faculty_name']}</option>"; } } // 最后拼接select和表单闭合部分 $output .= " </select> </div> </form> "; } }
优化建议
- 字符串拼接和业务逻辑要拆分编写,不要把循环、数据库查询这类操作嵌入到同一条字符串拼接语句中,既容易出现语法问题,可读性也极差。
- 建议使用参数绑定处理SQL查询,避免
{$update_id}直接拼接带来的SQL注入风险。
内容的提问来源于stack exchange,提问作者Dark Crow
相关产品推荐
相关产品推荐

