функция php для вставки в базу данных

Здравствуйте. Я как-то давно-давно спрашивал каким образом правильно экранировать данные в PDO. Со мной поделились информацией, и сейчас я везде активно использую ее.

$q = $modx->prepare("INSERT INTO table VALUES (?,?,?)");
$q->execute(array($param1, $param2, $param3));
Можно еще через :param указывать, не суть важно. И вот буквально сегодня вспомнил про ilyaut.ru/cheats/the-queries-insert-and-update-in-pdo/ эти две функции, которые у меня не заработали. Перепроверил (сейчас знаний и понимания работы чуть больше стало, думал может смогу разобраться) и выяснил, что без global $modx они дают 500ю ошибку. А с объявлением глобальной переменной функция обновления отрабатывает нормально, а вот вставка не работает.

Хочется уже из принципа разобраться что не так. Есть табличка, такой структурой:
_INSERT('users_social', array("id" => "null", "user_id" => "1", "mini" => "2", "full" => "3", "target" => "4","banks" => "5", "files" => "6", "date" => "7"))
Исключая все ошибки с типами данных я просто добавляю значения числовые в базу… Но ничего не добавляется по итогу.
Почему-то подозреваю что правда кроется в параметре id который null и AUTO_INCREMENT

В логи сыпятся:
[2018-04-11 15:09:32] (ERROR @ /var/www/cpa.pixliapp.com/core/cache/includes/elements/modsnippet/13.include.cache.php: 30) PHP warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
[2018-04-11 15:09:32] (ERROR @ /var/www/cpa.pixliapp.com/core/cache/includes/elements/modsnippet/13.include.cache.php: 20) PHP warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
[2018-04-11 15:09:32] (ERROR @ /var/www/cpa.pixliapp.com/core/cache/includes/elements/modsnippet/13.include.cache.php: 21) SQL: INSERT INTO users_social (`id`,`user_id`,`mini`,`full`,`target`,`banks`,`files`,`date`) VALUES (?,?,?,?,?,?,?,?);
Ну вроде бы все верно должно быть, таблица, ключи. массив $data с данными, но все равно не работает.

Разумеется, если сделать все ручками — все работает:

$q = $modx->prepare("INSERT INTO `users_social` VALUES (null, ?,?,?,?,?,?,?)");
 $q->execute(array($user_id,$field['mini'],$field['full'],$field['target'],$field['banks'],'none',time()));
Николай
11 апреля 2018, 12:11
modx.pro
1
1 574
+1

Комментарии: 2

Илья Уткин
11 апреля 2018, 15:56
+1
А если перед execute в коде функции добавить такую строчку?
$data = array_values($data);
    Іван Клімчук
    11 апреля 2018, 16:23
    0
    сделайте вместо null еще один ?, а null передавайте уже из php.
    $data = [null, $user_id, $field['mini'], $field['full'], $field['target'], $field['banks'], 'none', time())];
    $q = $modx->prepare("INSERT INTO `users_social` VALUES (?,?,?,?,?,?,?,?)");
    $q->execute($data);
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2