-3

3つのエラーがあります

警告: mysqli_stmt::fetch() は正確に 0 個のパラメーターを想定しており、1 個は /Volumes/shared/Digital/_Websites/_TEST/qpm/classes/mysql.php 行 20 で指定されています

Notice: 行 23 で /Volumes/shared/Digital/_Websites/_TEST/qpm/classes/mysql.php の非オブジェクトのプロパティを取得しようとしています

Notice: 行 23 で /Volumes/shared/Digital/_Websites/_TEST/qpm/classes/mysql.php の非オブジェクトのプロパティを取得しようとしています

これが私のコードです

<?php 
require_once 'includes/constants.php';
class mysql{
    private $conn;

    function __construct(){
        $this->conn = $conn = new MySQLi(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME)
            or die ('There was an error in the connection');
        }

    function verify ($un, $pwd){


            $username = $un;
            $password = $pwd;
            if ($sth = $this->conn->prepare("SELECT pass FROM User WHERE username = '".$un."' LIMIT 1")) {
            $sth->execute();

            $user = $sth->fetch(PDO::FETCH_OBJ);

            // Hashing the password with its hash as the salt returns the same hash
            if (crypt($password, $user->hash) == $user->hash) {
              return true;
            } else { 

                return false; }

            }//end of if;

        }//end of verify

    }//enfd of class

パスを取得して、同じ場合は true、そうでない場合は false を返そうとしています

ありがとう

4

1 に答える 1

0

他の多くの php ユーザーと同じように、あなたは 2 つのまったく異なる API、mysqli と PDO を混同しています。

1つ、つまりPDOを選択し、コードをそれと一致させてください。

これは、すべての役に立たないものを取り除いたコードですが、
適切なもの、つまり準備されたステートメントが追加されたコードです。

function verify ($un, $pwd)
{
    $sql = "SELECT pass FROM User WHERE username = ?"
    $sth = $this->conn->prepare($sql);
    $sth->execute(array($un));
    $pass = $sth->fetchColumn();
    return (crypt($pwd, $pass) == $pass);
}

ただし、この関数はクラスverifyのメソッドであってはならないことに注意してくださいmysql

于 2013-09-02T09:52:53.903 に答える