Изо всех сил пытается определить решение этой ошибки - PullRequest
0 голосов
/ 21 февраля 2012

Я получаю эту ошибку, когда моя форма заполнена, несмотря на то, что успешный ответ отображается правильно и элемент добавляется в базу данных.

Вот ошибка

Предупреждение: mysql_free_result (): предоставленный аргумент не является допустимым ресурсом результатов MySQL в /home/site4/public_html/lab/mailinglist/mailing_list_external.php в строке 18

Строка 18 равна

mysql_free_result($check_res);

и весь PHP-файл

    <?php
include("mailing_list_include.php");
// determine if they need to see the form or not

if ($_POST["email"] == "") {
    header("Location: mailing_list_external.php");
    exit;
} else {
    // connect to database
    doDB();

    // check that the email is in list
    emailChecker($_POST["email"]);

    // get number of results and do action
    if (mysqli_num_rows($check_res) < 1) {
        // free result
        mysql_free_result($check_res); 

        // add record
        $add_sql =  "INSERT INTO subscribers (email)
                    VALUES('".$_POST["email"]."')";
        $add_res =  mysqli_query($mysqli, $add_sql)
                    or die(mysqli_error($mysqli));
        $display_block = "<p>Thanks for signing up!</p>";

        // close connection to mysql
        mysqli_close($mysqli);
    } else {
        // print failure message
        $display_block = "<p>You're already subscribed!</p>";

    }
}
?>
<html>
<body>
<?php echo "$display_block"; ?>
</body>
</html>

Как я уже сказал, он работает нормально, но я все еще получаю эту ошибку ...

Вот код для включенного файла (mailing_list_include.php)

    <?php

function doDB() {
global $mysqli;

// connect to server and select database; you may need it
$mysqli = mysqli_connect("localhost", "XXX",
    "XXX", "XXX");

    // if connection fails, stop script execution
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
}
}

function emailChecker($email) {
global $mysqli, $check_res;

//check that email is not already in list
$check_sql = "SELECT id FROM subscribers
    WHERE email = '".$email."'";
$check_res = mysqli_query($mysqli, $check_sql)
    or die(mysqli_error($mysqli));
}
?>

Ответы [ 3 ]

1 голос
/ 21 февраля 2012

Используйте mysqli_free_result - я подозреваю, что это потому, что вы используете mysql_free_result, который является другой библиотекой

1 голос
/ 21 февраля 2012

Если вы используете mysqli, я думаю, что вы должны использовать mysqli_close () для закрытия соединения или mysqli_free_result ()

 mysqli_free_result($check_res); 

здесь вы используетефункция из другой библиотеки

0 голосов
/ 21 февраля 2012

Если предположить, что это всего лишь ваш базовый скрипт, который регистрирует пользователя и отправляет электронное письмо, то вы можете решить свою проблему, полностью исключив вызовы _free_result и _close.Они действительно не служат никакой полезной цели, если вы не имеете дело с тысячами записей в одном запросе.

В php все ресурсы автоматически освобождаются после завершения скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...