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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:02:54