【问题标题】:Syntax error on return statement [closed]返回语句的语法错误[关闭]
【发布时间】:2013-06-18 19:29:27
【问题描述】:

我正在做这个简单的网站,我遇到了这个错误:

我的功能:

<?php 
function user_exists($username)
{
    $username = sanitize($username);
    $query = mysqli_query($connect, "SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
    return (mysqli_result($query, === 0) 1) ? true : false;
}
 ?>

我的php错误日志:

PHP Parse error:  
syntax error, unexpected '===' (T_IS_IDENTICAL) in function on line 6

第 6 行是返回线。

我了解语法错误的含义,但我很确定 '===' 不是问题。

【问题讨论】:

  • === 是问题所在。那返回试图做什么? mysqli_result 调用格式错误 - 第二个参数是 === 0,这是不正确的。
  • 不要尝试清理用户输入,而是使用prepared statements
  • 仅供参考,没有 mysqli_result() 这样的功能。并非所有mysql_XXX 函数都有对应的mysqli_XXX 函数,这是他们没有复制的。
  • ($query, === 0) 。不能将=== 0 作为参数传递。

标签: php mysql function syntax-error


【解决方案1】:

编辑:我只是在谈论三元条件,这个答案是错误的,因为 mysqli_result() 函数不存在。

我猜你正在尝试这样做:

return mysqli_result($query) === 0 ? false : true;

正如 Marcel Korpel 所说,使用准备好的语句来避免安全漏洞。

【讨论】:

  • 非常感谢,这正是我想做的事情!
  • 这不起作用,因为mysqli_result() 不存在,即使存在,那也是错误的语法。应该是mysqli_result($query, 1)
  • 我没有检查功能,我应该有。我所看到的只是三元条件的错误使用,我认为这是唯一的问题。正如 MrCode 所说,它不起作用,你应该寻找另一个答案。
【解决方案2】:

这里有一些问题。首先没有mysqli_result(),它不存在。相反,您可以获取如下所示的行。此外,您的 $connect 超出范围。您需要将它作为参数传递,并且正如 cmets 指出的那样,即使 mysqli_result() 确实存在,由于语法错误,它仍然无法工作。

function user_exists($username, $connect)
{
    $output = false;
    $username = sanitize($username);
    $query = mysqli_query($connect, "SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");

    if($query) // check the query was successful before trying to fetch
    {
        $row = mysqli_fetch_row($query);
        $output = $row[0] > 0;
    }

    return $output;
}

我假设你的sanitize() 正在做mysqli_real_escape_string()。为了获得最佳安全性,请切换到Prepared Statement

【讨论】:

  • 感谢您的长评!这非常有用,我一定会研究准备好的陈述。
猜你喜欢
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 2021-09-28
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多