使用PHP mysqli行时的奇怪行为
我目前正在将一个PHP脚本从5.4版的PHP服务器翻译成5.3版的PHP服务器 我立即注意到我们的登录脚本中有一种异常行为 在分析了一下脚本之后,我找到了问题的根源 调用$result->fetch\u行中第一行的成员时失败 $result的声明如下所示:使用PHP mysqli行时的奇怪行为,php,arrays,mysqli,Php,Arrays,Mysqli,我目前正在将一个PHP脚本从5.4版的PHP服务器翻译成5.3版的PHP服务器 我立即注意到我们的登录脚本中有一种异常行为 在分析了一下脚本之后,我找到了问题的根源 调用$result->fetch\u行中第一行的成员时失败 $result的声明如下所示: $username = $mysqli->real_escape_string(strtolower($_POST["USERNAME"])); $password = $mysqli->real_escape_string(md
$username = $mysqli->real_escape_string(strtolower($_POST["USERNAME"]));
$password = $mysqli->real_escape_string(md5(strtolower($_POST["PASSWORD"])));
$result = $mysqli->query("SELECT * FROM $table WHERE username='$username' AND password='$password'");
然而,出于本能,我检查了我是否正确地调用了data_seek;我有
打印出fetch_row()函数得到了以下结果
阵列([0]=>3[1]=>admin[2]=>d76362b0f640fbcf869033b5e4d1c4bf[3]=>Mr[4]=>Rasmus[5]=>4[6]=>7]=>0)
因此,阵列工作正常
但是下面的声明没有起作用
$Title=$result->fetch_row()[3]
因此,我尝试将整行存储在单个数组对象中,然后分别调用所有子成员
像这样:
$row = $result->fetch_row();
$Title = $row[3];
它工作得很好
为什么?此声明有什么问题:
$Title=$result->fetch_row()[3]
您说过您正在将脚本从PHP5.4转换为PHP5.3。显然你忘了那句话是因为
$Title = $result->fetch_row()[3];
不是有效的PHP5.3。您应该会在读取以下内容时出错:
分析错误:语法错误,在
您说过要将脚本从PHP5.4翻译成PHP5.3。显然您忘记了这一行,因为
$Title = $result->fetch_row()[3];
无效的PHP 5.3。读取时应出现错误:
分析错误:语法错误,在
如您在PHP.net的
functionname()[1]
是PHP5.4中添加的内容。如您在PHP.net的
functionname()[1]
是PHP5.4中添加的内容。在PHP5.3和更高版本中不可能直接取消函数调用的结果,但在PHP5.4中,可以直接取消函数调用的结果在PHP5.3和更高版本中不可能直接取消函数调用的结果,但在PHP5.4中,可以取消函数调用的结果PHP5.4引入了直接从调用方法引用返回数组元素的能力,这就是为什么它在5.3中不起作用的原因
从示例7开始
从PHP5.4开始,可以对
函数或方法直接调用。以前只能使用
临时变量
因此,您的临时解决方案看起来将成为一个长期解决方案:)PHP 5.4引入了直接从调用方法引用返回数组元素的功能,这就是为什么它在5.3中不起作用的原因 从示例7开始 从PHP5.4开始,可以对 函数或方法直接调用。以前只能使用 临时变量
因此,您的临时解决方案看起来将成为一个长期解决方案:)哪条语句错误?抱歉,这是一个糟糕的公式。刚刚更正。哪条语句错误?抱歉,这是一个糟糕的公式。刚刚更正。先生,您是对的。我刚开始编写PHP脚本,而我以前是用C#编程的。这是第一次用PHP5.3编写-我很抱歉遇到麻烦。一点也不麻烦。这样的问题并不少见。如果我找到了,我会提供一个到变更日志的链接。先生,你是对的。我刚开始编写PHP脚本,而我以前是用C#编写的。这是第一次用PHP5.3编写-我很抱歉遇到麻烦。一点也不麻烦。这样的pr问题并不少见。如果我找到一个变更日志,我会提供一个链接。