0

请帮助我在php中的新手

这是第 13 行

$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));

这是我的代码

<?php
function user_data($user_id) {
    $data = array();
    $user_id = (int)$user_id;

    $func_num_args = func_num_args();
    $func_get_args = func_get_args();

    if ($func_num_args > 1) {
        unset($func_get_args[0]);

        $fields = '`' . implode('`,`', $func_get_args) . '`';
        $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));

        print_r($data);

        return $data;
    }
}

function logged_in() {
    return (isset($_SESSION['user_id'])) ? true : false;
}

function user_exists($username) {
    $username = sanitize($username);
    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"), 0) == 1) ? true : false;
}

function user_active($username) {
    $username = sanitize($username);
    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `active` = 1"), 0) == 1) ? true : false;
}

function user_id_from_username($username) {
    $username = sanitize($username);
    return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id');
}

function login($username, $password) {
    $user_id = user_id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) == 1) ? $user_id : false;
}   
?>

请帮忙 非常感谢

4

2 回答 2

0

因此,您的失败查询mysql_query()返回FALSE而不是导致mysql_fetch_assoc失败的资源。

始终检查返回值,然后再将其传递给mysql_fetch_assoc()

$result = mysql_query("SELECT...");
if (!$result) {
    die('Invalid query: ' . mysql_error());
}

请注意,不要将 mysql_* 函数用于新代码。它们已被弃用。对 PDOMySQLi使用 准备好的语句。这是很好的PDO 教程

于 2013-03-23T22:27:35.210 回答
0

你的代码:

$data = mysql_fetch_assoc(mysql_query(.....

永远不要这样做。将两个数据库函数放在同一行代码中,其中一个只是将其结果直接传递给另一个。

通过这种方式,您完全忽略了mysql_query()可能出现错误的可能性。

这正是您的情况。在进行查询时由于某种错误而mysql_query()返回。false您没有检查错误,而只是将该结果传递给mysql_fetch_assoc(). 所以现在该函数被赋予了一个false值而不是 mysql 结果,这就是错误消息的全部内容。

您绝对必须将这两个调用放在不同的代码行中,并在它们之间进行一些错误检查。

发生的实际错误可能是由多种原因引起的,但是由于您已经丢弃了mysql_query正在生成的错误,我们无法确定问题是什么。在那里进行正确的错误检查将帮助您解决问题。

但是,一些可能的原因:

  • 您在没有任何其他参数的情况下调用了该函数,除了userID. 这将导致$fields被设置为一对空的反引号 ``,这将是无效的 SQL。
  • 其中一个字段的字段名中有一个反引号。您没有对此进行检查,但字段名中的反引号会破坏您的 SQL 代码。这很危险,可能会导致黑客入侵您的网站。
  • 数据库连接无效或断开。这可能是您代码中其他地方的问题(在这种情况下,您可能还需要在其他地方添加更好的错误检查),或者完全在您的代码之外(即如果数据库本身已关闭;不太可能,但可能;您的代码需要能够应对,如果它发生)。

最后,既然你说你是 PH​​P 的新手,我应该告诉你所有的mysql_xxx()函数都被弃用了;不再推荐使用它们。

我强烈建议您现在停止使用它们,以免遇到太多代码并且难以更改,因为它们将从 PHP 的未来版本中删除,并且使用它们的代码将停止工作。

相反,您应该考虑使用该PDO库。这是一个现代的 PHP 数据库库,它具有一整套功能,这些功能在旧mysql_xxx()功能中根本不可用。您可以在此处和此处找到更多信息。您还应该在这里阅读这个问题的答案:为什么我不应该在 PHP 中使用 mysql_* 函数?

希望有帮助。

于 2013-03-23T22:52:26.810 回答