PHP连接MySQL出现T_STRING语法错误,请求排查解决
解决PHP语法错误:unexpected 'is' (T_STRING)
嘿,我一眼就发现问题出在哪了——你第9行的SQL字符串拼接犯了个常见的单引号嵌套错误!咱们一步步拆解修复:
首先看报错的核心代码:
$cmd = ' SELECT ID FROM user WHERE user = '$name'';
在PHP里,单引号(')用来定义字符串时,字符串内部的单引号会直接闭合当前字符串。这就导致WHERE user = '这里就提前结束了字符串,后面的$name被当成了裸的PHP变量,紧接着的'又被当成新的字符串开头,整个语法逻辑彻底混乱,系统才会报出“unexpected 'is'”的错误(其实是解析混乱代码段时的误判)。
修复方案1:修正字符串拼接方式
你可以用两种简单方式修复这个字符串:
- 方式A:用双引号包裹整个SQL语句(双引号内可直接解析变量)
$cmd = " SELECT ID FROM user WHERE user = '$name'";
- 方式B:用字符串连接符(
.)拼接变量和字符串
$cmd = ' SELECT ID FROM user WHERE user = ' . $name;
修复方案2:使用预处理语句(更安全,强烈推荐)
虽然你用了real_escape_string处理变量,但直接拼接SQL仍有SQL注入风险,预处理语句是更标准的做法,还能彻底避免这类字符串拼接错误:
<?php $msg = ''; $con = new mysqli('server', 'username', 'pwd', 'db'); // 先检查数据库连接是否成功 if ($con->connect_error) { die("连接失败: " . $con->connect_error); } // 先判断POST变量是否存在,避免未定义索引警告 if(isset($_POST['name'])){ $name = $_POST['name']; $stmt = $con->prepare("SELECT ID FROM user WHERE user = ?"); $stmt->bind_param("s", $name); // "s"表示参数为字符串类型 $stmt->execute(); $result = $stmt->get_result(); $rowNumber = $result->num_rows; if($rowNumber != 0) { $msg = 'some text'; } } // 修正变量名拼写错误,去掉多余分号 if($msg != '') { echo '<a id="someid" href="somelink">some text</a>'; } // 记得关闭数据库连接 $con->close(); ?>
额外小问题修复
除了语法错误,你的代码还有两个容易忽略的小问题:
- 判断时写错了变量名:
$msgn != ''应该是$msg != '' - echo语句末尾多了一个分号:
echo '<a id=someid href="somelink">some text</a>';;改成单个分号即可
这样修改后,你的代码应该就能正常运行,实现只有你和朋友可见指定标签页的功能啦。
内容的提问来源于stack exchange,提问作者Kilian
相关产品推荐
相关产品推荐

