开发者

mysqli - warning and error

i have this code but i got two errors. I put in the comments the errors

if(!empty($_POST['email']) && validateEmail($email)) {
    $email = $_POST["email"];
    if ($sql = $db->prepare("select email from users where email=?")) {

        $sql->bind_param('s', $email);

        $sql->execute();

        $sql->bind_result($email);

        while ($sql->fetch()) {
            $salt = "PiuwrO1#O0rl@+luH1!froe*l?8oEb!iu)_1Xaspi*(sw(^&.laBr~u3i!c?es-l651";

            $password = md5($salt . $userExists["email"]);

            $pwrurl = "www.yoursite.com/reset_password.php?q=" . $password;

            $mailbody = "Dear user,<br><br>If this e-mail does not apply to you please ignore it. It appears that you have requested a password reset at our website www.yoursitehere.com<br>
            To reset your password, please click the link below. If you cannot click it, please paste it into your web browser's address bar.<br> <a href='$pwrurl'>$pwrurl</a>  <br> <br>
            Thanks,\nThe Administration";

            $mail->MsgHTML($mailbody);

            $mail->AddAddress("dxxb@hotmail.com","Nome da Pessoa");

            $mail->IsHTML(true)开发者_如何学Python;

            if(!$mail->Send()) {
                echo "Deu erro: " . $mail->ErrorInfo;
            } else {
                echo "Enviado com sucesso";
            }
        }
        $sql->close();
        $db->close();
    }

    ($sql = $db->prepare('insert into password_reset (code) values (?)')); // Warning: mysqli::prepare() [mysqli.prepare]: Couldn't fetch mysqli in

    $sql->bind_param('s', $password); // Fatal error: Call to a member function bind_param() on a non-object

    $sql->execute();
    $sql->fetch();
    $sql->close();
    $db->close();
}

all code works fine, but now i need to insert the salt in the db but i can't, and i don't know why

thanks

Edited code to the last version


After you execute a query, fetch returns one result. There may be more -- there may be many, many more -- so you should be calling fetch in a loop to get them all. You aren't supposed to prepare a new query until you've finished dealing with the old one, which would usually mean fetching every row of the result and closeing (in your case) $sql. Otherwise, the database is still in the middle of answering one request when you're trying to issue another one.


The first error says it all - you can't have more than 1 prepared statement/query "in flight" at once. You've not finished fetching data from the first query (select email ...) when you tried to prepare another statement (insert into ...).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜