无法使用带PDO :: execute()的php插入数据库

时间:2011-07-11 00:47:06

标签: php mysql database insert pdo

我创建了一个简单的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。谢谢!

2 个答案:

答案 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

它包含必须具有匹配变量和占位符名称的示例。