php-pdo查询与几个参数绑定

xurqigkl  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(274)

我目前正在学习php概念,只是不知道如何正确绑定查询。根据pdo手册,只有当查询的类型为string、int、float等时才绑定查询。我的第一个问题是:“我需要绑定日期吗?”如果需要,使用哪些参数。否则,我需要将关系的某些属性绑定到insert,以及如何处理不属于上述类型的剩余属性?这是我的密码:

public function addCustomer($fname, $lname, $email, $dob, $hashedPwd, $hash)
{
    $customer = new Customer($fname, $lname, $email, $dob, $hashedPwd);

    $sql = $this->pdo->prepare("INSERT INTO customer(fname, lname, email, date_of_birth, password, hash, active)"
        . " VALUES(:fname, :lname, :date_of_birth, :email, :password, :hash, :active)");

    $sql->bindValue(':fname', $customer->getFname(), PDO::PARAM_STR);
    $sql->bindValue(':lname', $customer->getLname(), PDO::PARAM_STR);
    $sql->bindValue(':email', $customer->getEmail(), PDO::PARAM_STR);
    $sql->bindValue(':password', $customer->getPassword(), PDO::PARAM_STR);
    $sql->bindValue(':hash', $hash, PDO::PARAM_STR);
    $sql->bindValue(':active', 0, PDO::PARAM_INT);

    try {
        $sql->execute(['date_of_birth' => $dob]);
        echo "SUCCESS" . "<br>";
    }catch (PDOException $e) {
        $e->getMessage();
    }

}
fnatzsnv

fnatzsnv1#

我通过传递一个数组,并使用问号作为占位符
我还建议创建一组泛型函数或db handler类,您只需传递一个查询和数组(或者可能是第二个带有db connection info的数组),然后在元素0处返回一个true或false的数组,在元素1处返回一条错误消息,或者在元素1上返回数据(在select的情况下)。
这是我的一个片段,修改后去掉了所有其他处理,但它显示了我如何参数化和准备查询。

<?php
    $query="insert into tablename(first_name,last_name) values(?,?)";
    $array=array("John","Doe");

    $dbconn = new PDO('mysql:host=' . $hostname . ';port=' . $dbPort . ';dbname=' . $dbName . ';charset=utf8', $username, $password, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
    $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $result = $dbconn->prepare($query);
    $result->execute($arr);
    if (!$result) {
        $retVal[] = false;
        $retVal[] = "some sort of error on execute";
        $retVal[] = $dbconn->errorInfo();
        return;
    }
    $retVal[] = true;
    $retVal[] = $dbconn->lastInsertId();

    return;

    ?>

相关问题