PHP MYSQL Предупреждение: mysql_query() ожидает, что параметр 1 будет строкой, ресурс указан в

Возможный дубликат:
mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, логическое значение указывается в select

<?php
    include 'connect.php';
    include 'header.php';

    $page = "signup.php";
    // receive the invite code:
    $code = $_POST['code'];
    $sql = "SELECT codes FROM invites WHERE codes='$code'";
    // check the table for matching codes
    $result = mysql_query($sql);
    // check if the request returned 1 or 0 rows from the database
    if (mysql_query($result)) {
        // end any previously defined sessions.
        session_start();session_unset();session_destroy();
        // start a new session
        session_start();
        // define the session variable.
        // this allows us to check if it's set later and is required for
        // the script to run properly.
        $code = $_POST["code"];
        mysql_query("DELETE FROM invites WHERE codes='$code'");
        header('Location: '.$page);
        exit;
    } else {
        echo "Invite invalid. Please try again later.";
        echo $code;
    }

    include 'footer.php';
?>

Я пытаюсь внедрить систему приглашений на веб-страницу, над которой я работаю. Однако, пытаясь оценить, есть ли строка, содержащая код приглашения, я либо получаю ничего, либо это предупреждение. Предупреждение в этом случае, но если я изменю состояние if на ==1, оно разрешает всем, независимо от кода, а ==0 выдает разные ошибки.

3 ответа

if (mysql_query($result)) {

Попробуй mysql_num_rows там.

Здесь есть несколько вещей не так.

1) Уязвимости SQL-инъекций, никогда не передавайте суперглобальные $_POST или $_GET или любую другую предоставленную пользователем переменную прямо внутри вашего запроса! Используйте как минимум mysql_real_escape_string() для переменной, прежде чем впустить ее в запрос, или лучше изучите параметризованные запросы, это лучший способ избежать уязвимостей SQL

2)

$result = mysql_query($sql);
// check if the request returned 1 or 0 rows from the database
if (mysql_query($result)) ....

Это не проверяет, возвращает ли запрос 1 или 0 строк, вы должны использовать здесь mysql_num_rows()

if(mysql_num_rows() == 1)  //or whatever you need to check

3)

session_start();session_unset();session_destroy();
// start a new session
session_start();

session_start () должен быть вызван прежде чем что-либо на вашей странице. Не знаю, почему это избыточность вызова, сброса, уничтожения, вызова этого здесь. Если вы хотите другой идентификатор, просто используйтеsession_regenerate_id();

И, как уже сказали другие, используйте некоторые сообщения об ошибках в вашем запросе, что-то вроде

$result = mysql_query($sql) or die(mysql_error())

на самом деле увидеть, что не удалось, где и почему.

Проблема в вашем запросе. Прежде всего, проверьте свое заявление и используйте это:

$result = mysql_query($sql) or die(mysql_error());

вместо этого

$result = mysql_query($sql);

Итак, вы можете увидеть, есть ли какая-либо ошибка в вашем запросе SQL.

Другие вопросы по тегам