MySQL准备好的声明似乎正确但不起作用

时间:2015-10-23 12:33:45

标签: php mysql mysqli

对于练习,我试图为包含三个字段的表编写一个简单的登录代码:id,teamnname和score。

有一个db_connect.php文件,需要它的文件包含在顶部。我知道这是正常工作的(因为functions.php文件中的其他函数似乎正在工作)。这个文件定义了$ mysqli,这似乎在其他地方工作得很好。

此文件如下所示:

<?php 
$mysqli = mysql_connect('host', 'database', 'password'); 
ob_start();
?> 

但是,唯一不起作用的功能是我的process_login函数。 login.php文件不会输出&#34;连接成功&#34;以外的任何内容。从数据库连接正常工作。它应该指示&#34;无效请求&#34;或重定向页面。

以下是使用此功能的login.php脚本...

<?php

include_once 'db_connect.php';
include_once 'functions.php';

custom_session();

if (isset($_POST['teamname'])) {
    $teamname = $_POST['teamname'];

    if (process_login($teamname, $mysqli) == true) {
        // redirect to the right place
        header('Location: ../index.php?start_game');
    } else {
        // redirect to an error page
        header('Location: ../index.php?error1')
    }
} else {

    // the correct POST variables were not sent to this page.
    echo 'Invalid Request';
}

这是functions.php中的有问题的功能:

function process_login($teamname, $mysqli) {
    if ($stmt = $mysqli->prepare("SELECT id, teamname, score FROM users WHERE     teamname = ? LIMIT 1")) {
        $stmt->bind_param('s', $teamname);
        $stmt->execute();
        $stmt->store_result();

        $stmt->bind_result($id, $teamname, $score);
        $stmt->fetch();

        if ($stmt->num_rows == 1) {
            $_SESSION['id'] = $id;
            $_SESSION['teamname'] = $teamname;
            $_SESSION['score'] = $score;
            return true;
        }
    }

    return false;
}

我已经玩过这个,而顶部准备好的声明似乎是罪魁祸首。我直接通过数据库运行SELECT语法,所以我知道它可能是错的。我经常尝试过很多东西,并且会感激一些经验丰富的帮助。

0 个答案:

没有答案