запрос php PDO с несколькими параметрами для привязки - PullRequest
0 голосов
/ 28 мая 2018

В настоящее время я изучаю концепции PHP и просто не могу понять, как правильно связать запрос.Согласно руководству PDO, запросы связываются, только если они имеют тип string, int, float и т. Д. Мой первый вопрос: «Нужно ли связывать дату?»Если да, какие параметры использовать.В противном случае мне нужно привязать некоторые атрибуты отношения для вставки и что делать с остальными, которые не относятся к упомянутым выше типам?Вот мой код:

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();
    }


}

1 Ответ

0 голосов
/ 28 мая 2018

Я делаю это, передавая массив и используя вопросительные знаки в качестве заполнителей

Я также рекомендую разработать набор универсальных функций или класс обработчика БД, чтобы вы могли просто передать запрос и массив (или, может быть, 2-й массив с информацией о соединении БД) и получить обратно массив с истиной или ложью в элементе 0 и либо с сообщением об ошибке в элементе 1, либо с данными из элемента 1 в (в случае выбора).

Вот мой фрагмент, модифицированный, чтобы убрать все другие обработки, но он показывает, как я параматизирую и готовлю запрос.

    <?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;

    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...