RumusBin
@RumusBin
Живу, учусь, не стесняюсь

Как правильно составить PDO?

Доброго времени всем! столкнулся с такой проблемой, при написании приложения (телефонная книга) на PHP, и сейчас попробую ее описать:
Приложение построено по принципу MVC. Существует контролер, который принимает запрос при записи нового контакта, вот непосредственно метод "add" который и занимается этим!
public function actionAdd() {
        if (isset($_GET['submit'])) {

            $data['name'] = htmlspecialchars($_GET['name']);
            $data['surname'] = htmlspecialchars($_GET['surname']);
            $data['patronymic'] = htmlspecialchars($_GET['patronymic']);
            $data['numbers'] = $_GET['number'];


            Contacts::addContact($data);
            PhoneNambers::addPhoneNumbers($data['numbers']);

            header('Location: /');
        } else {
            echo 'submit not have';
        }
        return true;
    }

А вот та самая модель PhoneNumbers, которая и отвечает за запись новых телефонных номеров и присваивает им contact_id
public static function addPhoneNumbers($data) {

        $contact_id = Contacts::getCount();       
        $db = Db::getConnection(); //подключаюсь к БД

        foreach ($data as $key => $number) { //создаю цикл для обработки массива с тел. номерами
            
            $sql = 'INSERT INTO phone_numbers (phone_number, contact_id) ' //создаю подготовленный запрос к БД
                    . 'VALUES (:phone_number, :contact_id)';
            $result = $db->prepare($sql);

            $result->bindParam(':phone_number', $number, PDO::PARAM_INT); //подствляю значение телефонного ноера
            $result->bindParam(':contact_id', $contact_id, PDO::PARAM_INT); //значение раннее полученного id из таблицы контактов
            $result->execute();           
        }        
    }

Так вот, при записи одного номера телефона, все в порядке, если их более чем один, записывается случайный ряд цифр - 2147483647, и всегда один и тот же, хотя случаются ситуации, когда и два номера нормально прописываются. Для меня это мистика, но вот, что я выяснил, данные приходят нормальные, а вот в БД они уже записываются случайными цифрами!
Может все дело в неправильном построении подготовленных запросов PDO?
  • Вопрос задан
  • 296 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
2147483647 - максимальное значение, которое может принимать поле с типом SIGNED INT.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
egor_nullptr
@egor_nullptr
Вместо bindParam() используйте bindValue().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы