我创建了一个简单的mySQL数据库,我试图使用PHP将一些测试数据插入其中。当我在Firefox上运行该方法时,我收到以下消息,我无法解决此问题:
警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:参数号无效:
我将方法插入我的数据库的方法是:
public function confirmInsert(){
$admin="admin";
$pass="12345v";
$mail="admin@example.com";
$insertSQL = "INSERT INTO 'users' ('user_name', 'user_pass, 'user_email')
VALUES (
:admin,
:pass,
:mail)";
try {
$stmt = $this->db->prepare($insertSQL);
$stmt ->bindParam(':user_name',$admin, PDO::PARAM_STR);
$stmt ->bindParam(':user_pass', $pass, PDO::PARAM_STR);
$stmt->bindParam(':user_email', $mail,PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
return TRUE;
} catch (Exception $e) {
$e -> getMessage();
}
}
我在// localhost上运行,并使用apache 2.2和php 5.2.17。谢谢!
答案 0 :(得分:3)
'在查询中以及绑定它们时,参数的名称不同。您还必须删除查询中字段名称周围的引号。
应该更好:
public function confirmInsert(){
$admin='admin';
$pass='12345v';
$mail='admin@example.com';
$insertSQL = "INSERT INTO users (user_name, user_pass, user_email)
VALUES (
:admin,
:pass,
:mail)";
try {
$stmt = $this->db->prepare($insertSQL);
$stmt ->bindParam(':admin',$admin, PDO::PARAM_STR);
$stmt ->bindParam(':pass', $pass, PDO::PARAM_STR);
$stmt->bindParam(':mail', $mail,PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
return TRUE;
} catch (Exception $e) {
$e -> getMessage();
}
}
答案 1 :(得分:0)
我还没有发表评论的权利,所以我必须将此作为答案发布..
R.E。使用bindParam()
变量名称的Pompom6784的答案不需要与参数匹配:
$stmt->bindParam(':user_name', $admin, PDO::PARAM_STR);
应该工作得很好。
您绑定:user_name
以接受仅名为$admin
的变量
..如果这让事情更清楚一点。
如果您想了解有关此主题的更多信息,请阅读以下文章:
Why you Should be using PHP’s PDO for Database Access
它包含必须具有匹配变量和占位符名称的示例。