当前位置: 首页 > 知识库问答 >
问题:

PDObind_param是未定义的方法[重复]

卫飞
2023-03-14

我正在远离mysql和mysqli,因为stackoverflow上的许多用户都在不断地谈论它的优点。

我做了一个数据库类,并测试了这个,这与数据库连接良好。我试图更新我准备好的语句,以匹配我在不熟悉的领域,但最终得到以下错误:

致命错误:调用E:\xampp\htdocs\imanage\insert中未定义的方法PDOStatement::bind_param()。php第50行

它反映了这一行:

$stmt-

此外,关于这一点,我得到了返回给我的数据库连接成功和关闭语句以及致命错误,例如:

已成功连接到数据库!已成功连接到数据库!已成功断开与数据库的连接

我将解释我试图实现的目标:

  • 在注册用户之前检查数据库中是否存在电子邮件
  • 如果是,告诉用户该电子邮件存在
  • 如果不匹配,将用户插入用户表并加密密码

相关代码如下,如果有人能给我一些指导,我们将不胜感激。

指数php

        <form id="loginForm" method="POST" action="class.Login.php">
        <input type="text" id="email" name="email" placeholder="E-mail">
        <input type="password" id="password" name="password" placeholder="Password" class="showpassword"> 
        <input type="submit" name="submit" value="Log in"></form>

插入php

public function insert() {

                    $stmt = $this->pdo->prepare("SELECT COUNT(*) FROM users WHERE email=?");
                    $stmt->bind_param("s", $_POST['email']);
                    $stmt->execute();
                    $stmt->bind_result($email_count);
                    $stmt->fetch();//fecth
                    $stmt->close();     

                    if ($email_count > 0) {
                        echo "email exisits! click here to try <a href='register'>again</a>";
                        } else {
                            //escape the POST data for added protection
                            $username = isset($_POST['username']) ? $_POST['username'] : null;
                            $cryptedPassword = crypt($_POST['password']);
                            $password = $cryptedPassword;
                            $name = isset($_POST['name']) ? $_POST['name'] : null;
                            $email = isset($_POST['email']) ? $_POST['email'] : null;
                            $stmta = $this->pdo->prepare("INSERT INTO users (username, password, name, email) VALUES (?, ?, ?, ?)");
                            //var_dump($this->pdo->error);
                            $stmta->bind_param('ssss', $username, $password, $name, $email); // bind strings to the paramater

                                /* execute prepared statement */
                                $stmta->execute();
                                printf("%d Row inserted.\n", $stmta->affected_rows);
                                /* close statement and connection */
                                $stmta->close();
                } // end email_count and insert to table
            } // end function

连接/分类。数据库php

<?php

// Database connection PDO

class Database {

    public function __construct() {
        // Connection information
        $host   = 'localhost';
        $dbname = 'imanage';
        $user   = 'root';
        $pass   = '';

        // Attempt DB connection
        try
        {
            $this->pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo 'Successfully connected to the database!';
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }

    }

     public function __destruct()
    {
        // Disconnect from DB
        $this->pdo = null;
        echo 'Successfully disconnected from the database!';
    }


}

$run = new Database();
?>

共有2个答案

季华茂
2023-03-14

一些PDO示例

带有Bind参数的示例

$stmt = $this->pdo->prepare("SELECT COUNT(*) FROM users WHERE email=:email");
$stmt->bindParam(":email", $_POST['email']);
$stmt->execute();
$stmt->fetch(PDO::FETCH_ASSOC);

使用数组的示例

$data = array($username, $password, $name, $email); 
$stmta = $this->pdo->prepare("INSERT INTO users (username, password, name, email) VALUES (?, ?, ?, ?)");
$stmta->execute($data);

PDO教程

谷德本
2023-03-14

bind_param()设置为bindParam()

 类似资料: