-3

我正在编写一个用于更改用户密码的 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

使用的表存储了多种属性,只有当一行的属性=“明文密码”时,它是密码行。

该表是由freeradius生成的,用于授权,所以我不能修改它的结构。

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

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

但是 PHP 仍然不喜欢它。

有人可以帮忙吗?非常感谢。

4

4 回答 4

1

请求不应该是这样的:

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

?

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

于 2013-06-06T17:24:25.083 回答
0

您的代码中有两个语法错误。&&首先,在 if 语句中使用时需要使用括号if((... ) && (...))

if (($newpass == $newpass2) && (strlen($newpass) < 21) && (strlen($newpass) > 5)) 

然后你需要在使用 equal 时使用单引号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}'";
于 2013-06-06T17:23:57.240 回答
0

字符串必须在 PHP 中被引用,所以你应该使用这样的东西:

$sqlPasswordQuery = 'SELECT value FROM  `radcheck` WHERE  `attribute` =  "Cleartext-Password" AND `value` = "' . $oldpass . '" AND `username` = "' . $userid . '"';
于 2013-06-06T17:24:18.010 回答
0
$sqlPasswordQuery = "SELECT value FROM  `radcheck` WHERE  `attribute` =  'Cleartext-Password' AND `value` = '".$oldpass."' AND `username` = '".$userid."'"

像这样试试。

于 2013-06-06T17:25:22.847 回答