Запрос php PDO с несколькими параметрами для привязки

В настоящее время я изучаю концепции 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();
    }


}

просто рассматривайте это как строку и придерживайтесь одного способа, либо загрузите их все в ->execute(), либо используйте ->bindValue, не объединяйте оба

Kevin 28.05.2018 05:13

@Ghost просто изменился на это: '$ sql-> bindValue (': date_of_birth ', $ customer-> getDob ()); $ sql-> execute ();' и это сработало. Однако, согласно руководству, типы данных, такие как дата, не должны быть привязаны. Итак, каков правильный способ?

Sergey Kim 28.05.2018 06:12

@SergeyKim Где ты видел, что даты нельзя связывать? Они не должны быть привязаны как целые числа, но их привязка должна быть хорошей. Может эта ветка будет полезна stackoverflow.com/questions/2374631/pdoparam-for-dates

user3783243 28.05.2018 07:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
291
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Я также рекомендую разработать набор общих функций или класс обработчика db, в котором вы можете просто передать запрос и массив (или, возможно, второй массив с информацией о подключении к базе данных) и получить обратно массив с истинным или ложным в элементе 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;

    ?>

Другие вопросы по теме