@arbitino

Как записать данные в базу данных, используя PDO?

Здраствуйте, не получается записывать в базу данных переменные из массива, помогите пожалуйста разобраться, т.к. сам ошибок не вижу.
В базе данных есть таблица с названием test в которой 4 столбца с наименованиями: id(INT(A.I)),name(text), description(text) и text(text).
Вот код из основного класса действия, в котором есть массив параметров и sql запрос:
$params = [
            'id' => '',
            'name' => 'name',
            'description' => 'description',
            'text' => 'text',
        ];

        $db = new Db();
      
        $data = $db->column('INSERT INTO test VALUES (:id,:name,:description,:text)', $params);
        var_dump($data);

Вот код методов column и query из класса Db:
public function query($sql, $params = []) {
        $stmt = $this->db->prepare($sql);
        if (!empty($params)) {
            foreach ($params as $key => $val) {
                if (is_int($val)) {
                    $type = PDO::PARAM_INT;
                } else {
                    $type = PDO::PARAM_STR;
                }
                $stmt->bindValue(':'.$key, $val, $type);
            }
        }
        $stmt->execute();
        return $stmt;
    }

public function column($sql, $params = []){
        $result = $this->query($sql, $params);
        return $result->fetchColumn();
    }

На выходе с помощью var_dump получаю bool(false) и соответственно в базу данных ничего не заносится.
так же при попытке выполнить запрос 'SELECT name FROM test WHERE name= :name', $params он выдает результат только если в массиве $params один параметр text, если в массиве есть другие параметры, как показано в коде выше, то выдает ошибку :
" PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens"
Честно говоря, код списывал, но когда писал, то вполне понимал как это должно работать, почему не работает не понимаю, подскажите пожалуйста в чем может быть причина.
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
black1277
@black1277
Вольный стрелок
Попробуйте вместо 'id' => '', в $params вот так:
$params = [
            'id' => null,
            'name' => 'name',
            'description' => 'description',
            'text' => 'text',
        ];

скорее всего id у вас с опцией автоинкремент и должен быть числом, а вы передаете пустую строку
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы