Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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 使用绑定值与PDO的连接不起作用_Php - Fatal编程技术网

Php 使用绑定值与PDO的连接不起作用

Php 使用绑定值与PDO的连接不起作用,php,Php,我有以下正常工作的连接,但我想在新变量中包含表中的userID列: public function userLogin() { $success = false; try { $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $sql = "S

我有以下正常工作的连接,但我想在新变量中包含表中的userID列:

public function userLogin() 
{
    $success = false;
    try {
        $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
        $stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
        $stmt->bindValue( "UserID", $this->userID, PDO::PARAM_STR );

        $stmt->execute();

        $valid = $stmt->fetchColumn();

        if( $valid ) {
            $success = true;
        }

        $con = null;
        return $success;
当我添加新行时,
$stmt->bindValue(“UserID”,$this->UserID,PDO::PARAM_STR)

它表示错误:SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配


哪里可能有问题?

绑定3个值,但只使用2个值

如果你想用我的话,就加上它

$sql = "SELECT * FROM users WHERE userid= :UserID AND username = :username AND password = :password LIMIT 1";

注意:绑定变量应该始终存在于您的查询中,如果不是更好的话,请删除它。

u bind 3个值,但只使用两个。.用户名和密码用于登录验证,我希望在会话中对另一个变量表中的用户ID进行会话化,这就是为什么我没有把它包括在WHERE中Clause@JohnSiniger您只需在fetch区域中获取userid,然后处理sessionDont,但除非您打算在语句中使用它,否则更好的存储是在一个默认变量上,以便进一步使用。
$sql = "SELECT * FROM users WHERE userid= :UserID AND username = :username AND password = :password LIMIT 1";