Php 未预期的T_变量

Php 未预期的T_变量,php,sql,Php,Sql,第5行SQL查询中的意外T_变量 如何解决这个问题 <?php include "system.php"; $usersystem = $_SESSION['username']; $passw = $_SESSION['password']; $query= "SELECT * FROM users WHERE username = "$usersystem" AND password = "$passw"; $autoexec= $mysqli-

第5行SQL查询中的意外T_变量 如何解决这个问题

<?php
    include "system.php";
    $usersystem = $_SESSION['username'];
    $passw = $_SESSION['password'];
    $query= "SELECT * FROM users WHERE username = "$usersystem" AND password = "$passw";
    $autoexec= $mysqli->query($query);
    $earnings = $autoexec['earnings'];
    $completed = $autoexec['completed'];
    if ($_SESSION['loggedin'] !=1){
        header ('Location: index.php);
    }
    ?>
基本PHP语法:

$query= "SELECT * FROM users WHERE username = "$usersystem" AND pas
                                              ^--         ^---
不能使用用于分隔字符串的同一类型的引号。试一试

$query= "SELECT * FROM users WHERE username = \"$usersystem\" AND pas
                                              ^---         ^--- note the escapes

由于这是一个简单的打字问题,投票结束问题…

语法高亮显示使您的问题显而易见:引号。查询中的字符串需要使用单引号:

$query= "SELECT * FROM users WHERE username = '$usersystem' AND password = '$passw'";

为什么要使用qoutes?
。。。用户名=foo
。。。你认为OP的表中有字段名
foo
吗?正是这样。如果查询字符串中变量周围没有引号,则变量的内容将被解释为字段名。假设你正在使用OP的系统<代码>选择。。。其中username=Alexander。。。OP的表中将不会有一个
Alexander
字段来再次比较用户名。但是
username='Alexander'
会将字符串Alexander与表中的username字段进行比较。@Alexander我的意思是无意冒犯,但是如果你想开始批评别人,你应该好好学习一下你的PHP技能。您对这两个答案的评论都不正确。@Alexander不,不是这样的,所以变量不会计算为变量。伟大的advice@Alexander变量仍将计算为变量。最外面的报价是双引号-quote@Alexander在双引号字符串中,变量是插值的,我把它混淆了,请考虑使用准备好的查询,在这种情况下,这些都不会发生。