You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP添加if语句后报syntax error, unexpected '$records1'错误原因咨询

解决PHP语法错误:"syntax error, unexpected '$records1' (T_VARIABLE)"

嘿,这个问题我太熟了——你遇到的是PHP里最常见的语法错误之一:括号不匹配!

错误原因分析

你看这段代码里的if判断:

if (!empty($continent) {

这里的!empty($continent)表达式后面少了一个闭合的右括号)!PHP的语法解析器是严格按照括号配对来识别代码块的,少了这个括号,它就完全搞不清接下来的代码结构了——当它看到下一行的$records1变量时,根本不知道这个变量应该属于哪个代码块,所以就抛出了"unexpected '$records1' (T_VARIABLE)"的错误。

修正后的基础代码

只需要补上缺失的右括号就能解决语法问题:

<?php 
$continent = $_GET['continent']; 
if (!empty($continent)) { // 这里补上了闭合的)
    $records1 = mysqli_query($link, "SELECT name, capital From country where continent='$continent'"); 
    while ($data1 = mysqli_fetch_array($records1)) { 
        $nume=$data1['name']; 
        $capitala=$data1['capital']; 
        echo '<br><br>'; 
        echo 'Tara ' . $nume . ' are capitala ' . $capitala . '.'; 
    } 
} 
?>

重要安全提醒:防止SQL注入

不过这里还要给你提个醒:直接把$_GET['continent']这种用户输入拼接到SQL语句里是非常危险的,很容易遭遇SQL注入攻击(比如恶意用户传入' OR 1=1 --就能查询出所有国家数据,甚至破坏数据库)。

推荐你改用mysqli的预处理语句来安全处理用户输入,修正后的安全版本代码如下:

<?php 
$continent = $_GET['continent']; 
if (!empty($continent)) { 
    // 初始化预处理语句
    $stmt = mysqli_prepare($link, "SELECT name, capital From country where continent=?");
    // 绑定参数:"s"表示参数是字符串类型
    mysqli_stmt_bind_param($stmt, "s", $continent);
    // 执行查询
    mysqli_stmt_execute($stmt);
    // 获取查询结果
    $records1 = mysqli_stmt_get_result($stmt);
    
    while ($data1 = mysqli_fetch_array($records1)) { 
        $nume=$data1['name']; 
        $capitala=$data1['capital']; 
        echo '<br><br>'; 
        echo 'Tara ' . $nume . ' are capitala ' . $capitala . '.'; 
    } 
    // 关闭预处理语句
    mysqli_stmt_close($stmt);
} 
?>

预处理语句会把用户输入当作纯数据处理,而不是SQL指令的一部分,能有效避免SQL注入风险。

内容的提问来源于stack exchange,提问作者Ackermann Bettina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:57:45