Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP没有';我不喜欢这根绳子。(意外的T_字符串语法错误)_Php_Mysql - Fatal编程技术网

PHP没有';我不喜欢这根绳子。(意外的T_字符串语法错误)

PHP没有';我不喜欢这根绳子。(意外的T_字符串语法错误),php,mysql,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 u

我正在编写一个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);
仅当一行的属性为“明文密码”时,所使用的表才存储多种属性

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


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

$sqlPasswordQuery = SELECT value FROM  `radcheck` WHERE  `attribute` =  "Cleartext-Password" AND `value` = "{$oldpass}" AND `username` = "{$userid}"
但是PHP仍然不喜欢它


有人能帮忙吗?非常感谢。

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


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

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

请求不应该是这样的吗:

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

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

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

像这样试试。

Eh……它不起作用,因为在PHP中不是这样处理字符串的。请阅读一些PHP教程。此外,您的代码容易受到SQL注入的影响。请使用准备好的语句!”我将代码修改为各种样式,例如:“你真的不应该到处尝试,直到你找到一些在编程方面有效的东西。找一本关于语言的手册,读一读-1。此外,您还应该阅读一些有关SQL中字符串分隔方式的内容。提示:它不是用
”-1:Eh,SQL中的双引号?真的吗?尽管你可以使用它,但一定要按照@thejh的评论检查SQL注入。正如他所说,最佳做法是使用准备好的语句。你不需要括号:
if((…)&(…)
if(…&&&…)
的工作原理完全相同。这实际上是毫无意义地过度添加括号。当且仅当
&&
|
处于同一级别时才有必要这样做。
$sqlPasswordQuery = 'SELECT value FROM  `radcheck` WHERE  `attribute` =  "Cleartext-Password" AND `value` = "' . $oldpass . '" AND `username` = "' . $userid . '"';
$sqlPasswordQuery = "SELECT value FROM radcheck WHERE attribute = 'Cleartext-Password' AND value = '$oldpass' AND username = '$userid'";
$sqlPasswordQuery = "SELECT value FROM  `radcheck` WHERE  `attribute` =  'Cleartext-Password' AND `value` = '".$oldpass."' AND `username` = '".$userid."'"