PHP语法错误求助:roomreserved.php第18行解析错误排查
排查PHP语法错误及解决方法
嘿,这个语法错误我太熟悉了!问题出在你双引号包裹的SQL字符串里,直接用$CN['CNO']这种关联数组写法触发了解析冲突——PHP在解析双引号内的变量时,会把$CN识别成变量,但后面的['CNO']会被当成无意义的零散字符,导致解析器懵圈,就抛出了那个T_ENCAPSED_AND_WHITESPACE错误。
错误根源拆解
简单说,PHP在双引号字符串里只认识$变量名这种基础格式,遇到$数组['索引']时,它没法自动把['索引']和前面的数组变量关联起来,就会把这部分当成意外的语法内容。
几种快速修正方案
方案一:用大括号包裹数组变量
这是最直接的写法,用{}把整个数组变量包起来,明确告诉PHP这是一个完整的变量:mysqli_query($con, "insert into Reservation values ('{$CN['CNO']}', CURDATE(), '$RoomCode', '$NoR', '{$RC['RoomDesc']}')")方案二:先把数组值存成普通变量
把数组里的取值先赋值给单独变量,再代入SQL,代码可读性也更高:$cno = $CN['CNO']; $roomDesc = $RC['RoomDesc']; mysqli_query($con, "insert into Reservation values ('$cno', CURDATE(), '$RoomCode', '$NoR', '$roomDesc')")方案三:用字符串拼接拆分变量
把数组变量从双引号里抽出来,用.做字符串拼接:mysqli_query($con, "insert into Reservation values ('" . $CN['CNO'] . "', CURDATE(), '$RoomCode', '$NoR', '" . $RC['RoomDesc'] . "')")
必须提的安全警告
最后要敲个警钟:你现在的写法有严重的SQL注入风险!直接把外部数据拼进SQL语句是非常危险的操作,建议立刻改用预处理语句,既能彻底避免这类语法问题,又能防注入:
$stmt = mysqli_prepare($con, "insert into Reservation values (?, CURDATE(), ?, ?, ?)"); mysqli_stmt_bind_param($stmt, "ssss", $CN['CNO'], $RoomCode, $NoR, $RC['RoomDesc']); mysqli_stmt_execute($stmt);
内容的提问来源于stack exchange,提问作者user9765437
相关产品推荐
相关产品推荐

