PHP运行insert1.php报unexpected variable "$IQ"语法错误排查求助
错误产生原因
PHP解析器按顺序逐行解析代码时,要求每段独立语句必须以分号;标记结束。你当前代码第8行的$password=$_POST['password']末尾缺失分号,解析器会默认将下一行内容作为当前语句的延续内容读取,读到第9行的变量$IQ时不符合语法拼接规则,因此抛出"unexpected variable $IQ"的语法错误。
除了触发报错的这一处,代码里还有另外2处语句末尾缺失分号的问题,即使修完第8行,后续解析仍会触发同类报错。
对应修复方案
- 补全所有缺失的语句结束分号:
- 第8行:修改为
$password=$_POST['password']; - 第13行:修改为
$Message="successful";(原代码此处不仅缺分号,还存在单词拼写错误,将successful错写为succeddful) - 第17行:修改为
$Message="error";
- 第8行:修改为
- 修复代码里的兼容与安全隐患(不修复会出现功能异常、安全漏洞):
- 你当前混用了已废弃的
mysql_*系列函数和mysqli_*函数,两套扩展的连接资源不互通,会导致选库、查询逻辑全部失效,且mysql_*扩展在PHP7.0及以上版本已被完全移除,需要统一替换为mysqli系列函数 - 直接将POST参数拼接进SQL语句存在严重SQL注入风险,建议改用预处理语句执行插入操作
- 你当前混用了已废弃的
修复后的完整参考代码:
<?php // 统一使用mysqli扩展连接数据库 $CN = mysqli_connect("localhost","root","","iostest"); // 检查连接是否成功 if (!$CN) { die("数据库连接失败:" . mysqli_connect_error()); } $name = $_POST['name']; $email = $_POST['email']; $password = $_POST['password']; // 使用预处理语句避免SQL注入 $stmt = mysqli_prepare($CN, "insert into scan(name,email,password) values(?, ?, ?)"); mysqli_stmt_bind_param($stmt, "sss", $name, $email, $password); $R = mysqli_stmt_execute($stmt); if($R) { $Message = "successful"; } else { $Message = "error:" . mysqli_error($CN); } echo $Message; // 释放资源关闭连接 mysqli_stmt_close($stmt); mysqli_close($CN); ?>
内容的提问来源于stack exchange,提问作者d.chan
相关产品推荐
相关产品推荐

