PHP PDO错误消息

时间:2016-05-02 11:14:54

标签: php mysql mysqli

所以我在编程方面不太好,但我试图登录我的网站。我已经研究了一下,PDO应该是最安全的调用mySQL查询。

问题是我无法得到它。我创建了一个函数并得到了这2个错误。 首先可能与functions.php中的另一个函数有关,但我不确定原因。 我已经读过关于第二个的东西,但没有得到我应该做的。

  

错误:

     

1:警告:缺少userData()的参数1,在page.php中调用   第34行并在第164行的functions.php中定义

     

2:致命错误:在非对象上调用成员函数prepare()   第165行的functions.php

这是我试图运行的功能

    function userData(){
        if ($stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? LIMIT 1")) {
            $stmt->bind_param('s', $_SESSION['username']); 
            $stmt->execute();  
            $stmt->store_result();
            $stmt->bind_result($username);
            $fetch_stmt=$stmt->fetch();

            if ($stmt->num_rows == 1) {
                $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);
                $_SESSION['username'] = $username;
                $email=$fetch_stmt['email'];
                return array($username,$email);
            } else {
                return false;
            }
        }

    }

此函数应从数据库返回一组用户数据。

2 个答案:

答案 0 :(得分:1)

首先,正如我在评论中已经提到的那样,您使用mysqli而不是PDO

但它与你的错误没有任何关系。

不确定缺少的参数错误,但似乎你在userData中定义了一个参数,但是在没有参数的情况下调用它。

第二个错误是关于variable scope。您的连接处理程序$mysqli在函数userData中未定义,因为它尝试查找本地变量$mysqli并失败。您必须将函数内部的处理程序作为参数传递,或者以某种方式重构代码,以便从其他位置获取处理程序。

答案 1 :(得分:0)

试一试,看看是否有帮助:

    <?php 

    //DATABASE CONNECTION CONFIGURATION:
    defined("HOST")     or define("HOST",   "localhost");           //REPLACE WITH YOUR DB-HOST
    defined("DBASE")    or define("DBASE",  "_TEST_");              //REPLACE WITH YOUR DB NAME
    defined("USER")     or define("USER",   "root");                //REPLACE WITH YOUR DB-USER
    defined("PASS")     or define("PASS",   "root");                //REPLACE WITH YOUR DB-PASS


    function getUserData(){
        $dbh            = new PDO('mysql:host='.HOST.';dbname='. DBASE,USER,PASS);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $stmt = $dbh->prepare("SELECT * FROM users WHERE username = :uName LIMIT 1");
        $stmt->bindParam(':uName', $_SESSION['username']);
        $stmt->execute();
        $result = $stmt->fetch(PDO::FETCH_OBJ);

        //YOU MAY JUST RETURN $result & ACCESS ALL DATA IN IT USING OBJECTION ORIENTATED APPROACH LIKE: $email = $result->email;
        if(!empty($result)){
            //return array($_SESSION['username'], $result->$result->email);
               return $result;
        }                
        return null;

    }