PHP不喜欢这个T_String。 (语法错误意外T_STRING)

时间:2013-06-06 17:21:26

标签: php mysql

我正在编写一个用于更改用户密码的MYSQL查询。

部分代码是:

if ($newpass == $newpass2 && strlen($newpass) < 21 && strlen($newpass) > 5) {
$sqlPasswordQuery = "SELECT value FROM radcheck WHERE attribute = "Cleartext-Password" AND value = "{$oldpass}" AND username = "{$userid}"";
$oldPasswordResult = mysql_query($sqlPasswordQuery);

中间的线是错误的位置(第56行):

Parse error: syntax error, unexpected T_STRING in /(directory)/changepass.php on line 56

使用的表存储多种属性,仅当行的属性=“Cleartext-Password”时,才是密码行。

该表由freeradius生成,用于授权,因此我无法修改其结构。

我将代码修改为各种样式,例如:

$sqlPasswordQuery = SELECT value FROM  `radcheck` WHERE  `attribute` =  "Cleartext-Password" AND `value` = "{$oldpass}" AND `username` = "{$userid}"

但是PHP仍然不喜欢它。

有人能伸出援助之手吗?非常感谢。

4 个答案:

答案 0 :(得分:1)

请求不应该是这样的:

$sqlPasswordQuery = "SELECT value FROM radcheck WHERE attribute = 'Cleartext-Password' AND value = '$oldpass' AND username = '$userid'";

这是基本的php字符串理解。您不能在已经用双引号分隔的字符串中使用双引号。你必须使用另一个字符串分隔符作为简单的引号,或者转义它们(\"),以便它们直接解释为一个字符。

答案 1 :(得分:0)

您的代码中有两个语法错误。 首先,如果在statemens &&

中使用if((... ) && (...)),则需要使用括号
if (($newpass == $newpass2) && (strlen($newpass) < 21) && (strlen($newpass) > 5)) 

然后,您需要在使用相等attribute = 'Cleartext-Password'

时使用单引号

所以你的代码看起来像这样

if (($newpass == $newpass2) && (strlen($newpass) < 21) && (strlen($newpass) > 5)) 
{
    $sqlPasswordQuery = "SELECT value FROM radcheck WHERE attribute = 'Cleartext-Password' AND value = '{$oldpass}' AND username = '{$userid}'";

答案 2 :(得分:0)

必须在PHP中引用字符串,因此您应该使用以下内容:

$sqlPasswordQuery = 'SELECT value FROM  `radcheck` WHERE  `attribute` =  "Cleartext-Password" AND `value` = "' . $oldpass . '" AND `username` = "' . $userid . '"';

答案 3 :(得分:0)

$sqlPasswordQuery = "SELECT value FROM  `radcheck` WHERE  `attribute` =  'Cleartext-Password' AND `value` = '".$oldpass."' AND `username` = '".$userid."'"

试试这样。