Php mysql_query()异常失败

Php mysql_query()异常失败,php,mysql,Php,Mysql,这是一件非常简单的事情,但出于某种原因它不起作用。这是我的密码 我正在制作一个函数(它是类的一部分),用于检查用户名或电子邮件是否存在: public function exists ($what, $who) { $sql = "SELECT * FROM users WHERE $what = $who"; $query = mysql_query($sql); if (mysql_num_rows($query) != 0) { retur

这是一件非常简单的事情,但出于某种原因它不起作用。这是我的密码

我正在制作一个函数(它是类的一部分),用于检查用户名或电子邮件是否存在:

public function exists ($what, $who)
{
    $sql = "SELECT * FROM users WHERE $what = $who";
    $query = mysql_query($sql);

    if (mysql_num_rows($query) != 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
该函数不返回任何内容。事实上,如果我通过普通PHP运行该查询,它也不会返回任何结果。我不明白为什么

以下代码完美地返回新闻条目:

function fetch($id = '') 
{
    if (empty($id))
    {
        $query = 'SELECT * FROM news ORDER BY id desc';
    }
    elseif (is_numeric($id))
    {
        $query = "SELECT * FROM news WHERE id = $id";
    }
    else
    {
        $route->to(SITE_URL);
    }
    $result = mysql_query($query);

    if (mysql_num_rows($result) > 0)
    {
        return $result;
    }

}

我很困惑。

问题是您的查询中缺少引号:

 $sql = "SELECT * FROM users WHERE $what = $who";
 //SELECT * FROM users WHERE username = Mario  is not a valid query
应该是:

 $sql = "SELECT * FROM users WHERE $what = '$who'";

其他查询之所以有效,是因为您正在对照id进行检查,在本例中是对照字符串进行检查(在本例中,您需要引号)

问题在于您的查询中缺少引号:

 $sql = "SELECT * FROM users WHERE $what = $who";
 //SELECT * FROM users WHERE username = Mario  is not a valid query
应该是:

 $sql = "SELECT * FROM users WHERE $what = '$who'";

其他查询之所以有效,是因为您正在对照一个id进行检查,在本例中是对照一个字符串(在本例中,您需要引号)

可能查询执行失败,并且您在php.ini的屏幕上关闭了错误

尝试对查询的正确执行添加中间检查:

 $query = mysql_query($sql); 

 if ($query === FALSE) {

     // log error with mysql_errno($conn) and mysql_error($conn);

 } else {

     if (mysql_num_rows($query) != 0) {

         return true;

etc. etc.

可能查询执行失败,并且在php.ini的屏幕上关闭了错误

尝试对查询的正确执行添加中间检查:

 $query = mysql_query($sql); 

 if ($query === FALSE) {

     // log error with mysql_errno($conn) and mysql_error($conn);

 } else {

     if (mysql_num_rows($query) != 0) {

         return true;

etc. etc.

函数永远不会返回任何内容。它将始终返回true或false,具体取决于查询的结果。我建议您使用
mysql\u error()
您知道吗?该函数永远不会返回任何内容。它将始终返回true或false,具体取决于查询的结果。我建议您使用
mysql\u error()
您知道吗?问题是,$what可以指定字符串或id属性。如果他检查id呢?这不是问题,您可以从id为'4'的表中选择*您可能希望使用PDO()的参数化查询。如果用户提供了
$id
,这也可以避免SQL注入。是的,这是真的,我只是指出了查询不起作用的原因,而不是其他安全问题,我将更新准备语句的答案(但我真的需要为selects准备语句吗?这不足以净化该值吗?)@尼古拉:是的,在MySQL中你可以,但这不符合SQL标准。@米迦勒:非常正确,但是你仍然需要考虑<代码> MigICHeXeXe>代码>问题,那就是什么可以指定一个字符串或ID属性。如果他检查ID,这不是问题,你可以从ID=“4”你可能想要的表中选择*。将参数化查询与PDO()一起使用。这也将使您免于SQL注入,如果用户提供了
$id
,则目前可以进行SQL注入。是的,这是真的,我只是指出了该查询不起作用的原因,而不是其他安全问题,我将为准备好的语句更新答案(但是,我真的需要为SENDUCTION准备好的语句吗??难道不足以对值进行消毒吗?)@尼古拉:是的,在MySQL中您可以,但这不符合SQL标准。@米迦勒:非常正确,但是您仍然需要考虑<代码> MigICIG行情> <代码>。