【发布时间】:2012-05-12 15:29:09
【问题描述】:
嗨,我在 mysql 中有一个表,有六个字段
ID, mobileNumber, firstName, lastName, email, password , rollID
ID 是自动递增的,我想使用 php 插入它
php代码
public function run($firstName, $lastName, $mobileNumber, $email, $password, $rePassword) {
if (!$this->db->isExistedMobile($mobileNumber)) {
try {
$query = "INSERT INTO user (firstName, lastName, mobileNumber, email, password, rollID)
VALUES (:firstName, :lastName, :mobileNumber, :email, :password, 'rollID')";
$sth = $this->db->prepare($query);
$sth->execute(array(
':firstName' => $firstName,
':lastName' => $lastName,
':mobileNumber' => $mobileNumber,
':email' => $email,
':password' => $password,
':rollID' => "roma"
));
header("location: " . URL . "index");
} catch (PDOException $e) {
die($e->getMessage());
exit;
}
} else {
include 'controlers/Error.php';
$error = new Error();
$error->index("you enterd a used mobile number");
}
}
我有这个例外
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
函数 isExistedMobile 总是返回 false 所以不用担心,我不知道哪里错了,是语法吗?还是在rollID cos中我使它成为静态的? 谢谢你的帮助:)
【问题讨论】:
-
(我没有投反对票)。你能解释一下出了什么问题吗?一个假定记录没有按预期插入到数据库中,但您实际上并没有这么说。或者也许是重定向没有按预期工作?注:在调试过程中设置
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);是值得的,以便输出任何 PDO 错误。 -
如果您熟悉 try/catch 块,您可以将整个查询放在 try{} 和 catch(PDOException $e) 中。我没有看到任何明显的错误,所以我的猜测是其中一个变量是未定义的。
-
另外,你应该
exit;或die()在使用标题位置之后,并将“控制器”作为其中的两个 L。 :P -
我尝试了 try 和 catch,但没有发现异常 :(,我将更新问题以包括 try 和 catch
-
@WilliamKinaan:除非抛出异常,否则您无法捕获异常 - 为此您必须更改 PDO 的错误模式,如我之前的评论中所述。但我建议这样做,然后不捕获异常,以便将其输出并且您可以了解发生了什么。