Php PDO数据库插入

Php PDO数据库插入,php,mysql,database,pdo,Php,Mysql,Database,Pdo,嗨,我在mysql中有一个表,有六个字段 ID, mobileNumber, firstName, lastName, email, password , rollID ID是自动递增的,我想使用php插入它 PHP代码 我有一个例外 SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens 函数isExistedMobile总是返回false,所以

嗨,我在mysql中有一个表,有六个字段

ID, mobileNumber, firstName, lastName, email, password , rollID
ID是自动递增的,我想使用php插入它

PHP代码 我有一个例外

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
函数isExistedMobile总是返回false,所以不用担心,我不知道哪里出错了,是语法错误吗?还是在rollID中,因为我让它是静态的? 感谢您的帮助:)

参数数组的问题是后面有一个逗号,这在其中创建了一个额外的
null
元素

我建议恢复到原来的版本(使用
rollID
的文本值),但请确保删除
$password
后面的逗号:

public function run($firstName, $lastName, $mobileNumber, $email, $password, $rePassword) {
        if (!$this->db->isExistedMobile($mobileNumber)) {
            $query = "INSERT INTO user (firstName, lastName, mobileNumber, email, password, rollID)
                VALUES (:firstName, :lastName, :mobileNumber, :email, :password, 'ddd')";
            $sth = $this->db->prepare($query);
            $sth->execute(array(
                ':firstName' => $firstName,
                ':lastName' => $lastName,
                ':mobileNumber' => $mobileNumber,
                ':email' => $email,
                ':password' => $password  // , removed from here
            ));
            header("location: " . URL . "index");
        } else {
            include 'controlers/Error.php';
            $error = new Error();
            $error->index("you enterd a used mobile number");
        }
    }

(我没有投反对票)。你能解释一下出了什么问题吗?有人假设记录没有按预期插入数据库,但实际上并没有这样说。或者是重定向没有按预期工作?注意:值得设置
$this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常)以便输出任何PDO错误。如果您熟悉try/catch块,可以将整个查询放入try{}and catch(PDOException$e)中。我没有看到任何明显的错误,所以我猜测其中一个变量是未定义的或其他什么
die()
使用表头位置后,将“控制器”作为其中的两个Ls:Pi已尝试尝试尝试捕获,但未发现异常:(,我将更新问题,以包括try和catch@WilliamKinaan:除非抛出异常,否则无法捕获异常-为此,您必须更改PDO的错误模式,如我之前的评论中所述。但我建议您这样做,然后不捕获异常,以便将其输出,您可以理解发生了什么。我需要将rollID设置为be static,它的值是“roma”@WilliamKinaan:您在开始时的查询是正确的;您只需要删除多余的
。您的意思是吗?$query=“插入用户(firstName,lastName,mobileNumber,email,password,rollID)值(:firstName,:lastName,:mobileNumber,:email,:password,rollID)”;这不是一个好答案。考虑到OP想要什么,您应该在查询中为rollID添加一个冒号,作为GolezTrol点out@Mahn:查看OP对其问题的修改,看看他从何处开始-rollID只是在他自己的尝试和错误尝试下开始向参数移动,以解决我在回答中发现的问题。如s在他的问题中,他希望rollID是“静态的”(我们可以理解为从他最初的帖子中“获取一个常量文本值”)。
public function run($firstName, $lastName, $mobileNumber, $email, $password, $rePassword) {
        if (!$this->db->isExistedMobile($mobileNumber)) {
            $query = "INSERT INTO user (firstName, lastName, mobileNumber, email, password, rollID)
                VALUES (:firstName, :lastName, :mobileNumber, :email, :password, 'ddd')";
            $sth = $this->db->prepare($query);
            $sth->execute(array(
                ':firstName' => $firstName,
                ':lastName' => $lastName,
                ':mobileNumber' => $mobileNumber,
                ':email' => $email,
                ':password' => $password  // , removed from here
            ));
            header("location: " . URL . "index");
        } else {
            include 'controlers/Error.php';
            $error = new Error();
            $error->index("you enterd a used mobile number");
        }
    }