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
相关产品推荐
相关产品推荐

