Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP bindParam不起作用-blindValue不是解决方案_Php_Mysql_Pdo - Fatal编程技术网

PHP bindParam不起作用-blindValue不是解决方案

PHP bindParam不起作用-blindValue不是解决方案,php,mysql,pdo,Php,Mysql,Pdo,我想不出来。我在谷歌上搜索过,很多答案都提到blindValue是解决方案,但我也尝试过,但运气不好 问题是SELECT语句返回零条记录,但它应该返回一条记录。如果我将这些值硬编码到SQL语句中,它就可以工作,但将它们作为参数传递则不行。谁能帮我解决这个问题吗?谢谢 <?php function checklogin($email, $password){ try { // Connection $conn; include_

我想不出来。我在谷歌上搜索过,很多答案都提到blindValue是解决方案,但我也尝试过,但运气不好

问题是SELECT语句返回零条记录,但它应该返回一条记录。如果我将这些值硬编码到SQL语句中,它就可以工作,但将它们作为参数传递则不行。谁能帮我解决这个问题吗?谢谢

<?php
function checklogin($email, $password){
    try
    {
        // Connection
        $conn;
        include_once('connect.php');
        // Build Query
        $sql = 'SELECT pkUserID, Email, Password, fkUserGroupID FROM tbluser WHERE Email = :email AND Password = :password';
        // $sql = 'SELECT pkUserID, Email, Password, fkUserGroupID FROM tbluser WHERE Email = "a" AND Password = "a"';
        // Prepare the SQL statement.
        $stmt = $conn->prepare($sql);
        // Add the value to the SQL statement
        $stmt->bindParam(':email', $email, PDO::PARAM_STR);
        $stmt->bindParam(':password', $password, PDO::PARAM_STR);
        // Execute SQL
        $stmt->execute();
        // Get the data in the result object
        $result = $stmt->fetchAll(); // $result is NULL always...

        // echo $stmt->rowCount(); // rowCount is always ZERO....

        // Check that we have some data
        if ($result != null)
        {
            // Start session
            if (session_status() == PHP_SESSION_NONE) {
                session_start();
            }
            // Search the results
            foreach($result as $row){
                // Set global environment variables with the key fields required
                $_SESSION['UserID'] = $row['pkUserID'];
                $_SESSION['Email'] =  $row['Email'];
            }
            echo 'yippee';
            // Return empty string
            return '';
        }
        else {
            // Failed login
            return 'Login unsuccessful!';
        }
        $conn = null;
    }
    catch (PDOexception $e)
    {
        return 'Login failed: ' . $e->getMessage();
    }
}
?>

连接代码为

<?php
$servername = 'localhost';
$username = 'admin';
$password = 'password';

try {
    // Change this line to connect to different database
    // Also enable the extension in the php.ini for new database engine.
    $conn = new PDO('mysql:host=localhost;dbname=database', $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // echo 'Connected successfully';
}
catch(PDOException $e)
{
    echo 'Connection failed: ' . $e->getMessage();
}

?>

我正在连接mySQL。谢谢你的帮助,
吉姆这是一个简单但愚蠢的错误

我在connect.php文件中还有一个名为$password的变量,它覆盖了我传递给checklogin的$password


Jim

警告:编写自己的访问控制层并不容易,而且有很多机会使它严重出错。请不要编写您自己的身份验证系统,因为任何现代的同类产品都具有强大的内置功能。至少要遵循密码,不要将密码存储为纯文本。@tadman谢谢你的建议,代码还处于非常早期的阶段-只是bindParam功能有问题,这让我抓狂。我明白,这就是为什么我要说要格外小心。很容易忘记这些事情,为自己制造一个噩梦场景。这就是为什么我强烈建议您在一个适合您的风格和需求的框架上切齿,因为这是一个已解决的问题,您可以专注于开发实际的应用程序,而不是陷入技术细节的泥沼。这个查询独立于PHP工作吗?你能确认你绑定的两个变量是正确的,并且不包括像散乱的空格这样的东西吗?例如,您可以通过将
$email
替换为字符串进行测试。仅为了检查,请尝试以下操作:$sql='从tbluser中选择pkUserID、email、Password、fkUserGroupID,其中email='.$email.'和Password='.$Password;我认为你的错误在函数参数中