PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource, string given



  • There's a mistake.

    PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource, string given in /home/u20806/public_html/strangeip.php on line 34

    These lines:

    if (isset($_SESSION["session_username2"])) {
        $query = mysql_query("SELECT * FROM usertbl WHERE username='" . $_SESSION["session_username2"] . "'");
        while ($row = mysql_fetch_assoc($query)) {
            print_r($row);
            $query = $row['email'];
        }
    }
    

    This code returns the type of mass

    Array ( [id] =state 1 [email] = blabla [username] = constituent admin [password] = constituent 1234 [time] = tie 1452114053 [ip] = category 127.0.0.1 )

    $query out.

    Resource id #6

    But $row:

    Array ( [id] =state 1 [email] = blabla [username] = constituent admin [password] = constituent 1234 [time] = tie 1452114053 [ip] = category 127.0.0.1 )


  • QA Engineer

    There must be a mistake in the request and mysql_query returns FALSE♪ Look. error_log Web server.

    Updated

    I didn't take the elephant.♪ Your main mistake is you're misappropriating the variable. $query Structural value$query = $row['email'];) Therefore, in the next step of the cycle mysql_fetch_assoc() It's a string point that makes a mistake.

    In general, however, it is not good to do this:

    if (isset($_SESSION["session_username2"])) {
        $query = mysql_query("SELECT * FROM usertbl WHERE username='" . $_SESSION["session_username2"] . "'");
        /* Вставлять переменные в запрос без предварительной
           фильтрации и экранирования данных чревато ошибками
           и SQL-инъекциями. */
        while ($row = mysql_fetch_assoc($query)) {
            /* Брать данные в цикле наверное не очень правильно, что-то
               мне кажется что вы ожидаете параметры для одного пользователя */
            print_r($row);
            $query = $row['email'];
            /* Ну и наконец вот это и есть причина проблемы, которую вы
               обозначили в вопросе */
        }
    }
    

    As you can see, @splash58 is expanding. php_mysql is outdated and will be removed in the next versions.

    Here's an example of how to do it if you don't want to. Bye. I'm goin' out. php_mysql:

    if (isset($_SESSION["session_username2"])) {
        $safeUserName = mysql_real_escape_string($_SESSION["session_username2"]);
        $result = mysql_query('SELECT * FROM usertbl WHERE username="' . $safeUserName . '"');
        if ($row = mysql_fetch_assoc($result)) {
            $userMail = $row['email'];
        } else {
            throw new Exception('Not found user: ' . $safeUserName, MY_ERR_NOT_FOUND_USER);
            /* Пользуйтесь исключениями - это хорошая практика.
               Просто поверьте :) */
        }
        /* Еще можно проверить количество возвращенных строк, если их
           больше чем одна, то эту ситуацию тоже стОит рассмотреть отдельно */ 
    }
    



Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2