Модераторы: IZ@TOP, skyboy, SamDark, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PDO и Token, удаление token из БД 
:(
    Опции темы
ROM710
Дата 8.6.2019, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.2.2014

Репутация: нет
Всего: нет



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

// удаляем токен из базы
$stmt  = $dbh->prepare("DELETE FROM pending_users WHERE name = ? AND token = ? AND tstamp = ?", $stmt->execute(array(
    $name,
    $token,
    $tstamp
)));
// 1 день в секундах = 60 секунд * 60 минут * 24 часа
$delta = 60;

// проверка
if ($_SERVER["REQUEST_TIME"] - $tstamp > $delta) {
    throw new Exception("время жизни токена истекло.");
}
// активируем пользовательский аккаунт
// ...


А выдает две ошибки - 1. Предупреждение: PDOStatement:: execute() [pdostatement.execute]: SQLSTATE[HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов

     2. Предупреждение: PDO:: prepare () ожидает, что параметр 2 будет массивом, логическим заданным в......





PM MAIL   Вверх
webproger
Дата 11.6.2019, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.5.2019

Репутация: нет
Всего: нет



Попробуйте так
Код

$stmt = $dbh->prepare("DELETE FROM `pending_users` WHERE `name` = :name AND `token` = :token AND `tstamp` = :tstamp");
$stmt->execute(array(
    ':name' => $name,
    ':token' => $token,
    ':tstamp' => $tstamp
));

PM MAIL   Вверх
whatisnot
Дата 11.6.2019, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Цитата(webproger @  11.6.2019,  13:57 Найти цитируемый пост)
$stmt->execute(array(
    ':name' => $name,
    ':token' => $token,
    ':tstamp' => $tstamp
));


С чего вдруг не так?

$stmt->execute(array(
    'name' => $name,
    'token' => $token,
    'tstamp' => $tstamp
));

Именованная метка, это ключ переданного массива, превращать его в метку, это зачем? И ошибка не в том, что неименованные метки используются, а в синтаксисе. 

PM MAIL   Вверх
webproger
Дата 11.6.2019, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.5.2019

Репутация: нет
Всего: нет



Цитата(whatisnot @ 11.6.2019,  18:51)
И ошибка не в том, что неименованные метки используются, а в синтаксисе. 

Ну, синтаксис я тоже исправил.
Сравните с тем, что было
Код

$stmt  = $dbh->prepare("DELETE FROM pending_users WHERE name = ? AND token = ? AND tstamp = ?", $stmt->execute(array(
    $name,
    $token,
    $tstamp
)));

PM MAIL   Вверх
whatisnot
Дата 12.6.2019, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Цитата(webproger @  11.6.2019,  19:09 Найти цитируемый пост)
Ну, синтаксис я тоже исправил.



Вы пишите отсебятину, а нужно прочесть о функции, внимательно.
PM MAIL   Вверх
webproger
Дата 12.6.2019, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.5.2019

Репутация: нет
Всего: нет



Цитата

Вы пишите отсебятину, а нужно прочесть о функции, внимательно. 

Разве можно передавать метод PDOStatement::execute в $driver_options?
На сколько я знаю, это должен быть отдельный запрос, после подготовки PDO::prepare.

Или вы о том, что я названия параметров указал в массиве?
Ну так я просто так всегда делаю. Мне так удобней)
PM MAIL   Вверх
whatisnot
Дата 12.6.2019, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Цитата(webproger @  12.6.2019,  13:42 Найти цитируемый пост)
Разве можно передавать метод PDOStatement::execute в $driver_options?
На сколько я знаю, это должен быть отдельный запрос, после подготовки PDO::prepare.


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

Код

$stmt  = $dbh->prepare("DELETE FROM pending_users WHERE name = ? AND token = ? AND tstamp = ?"); //подготавливается запрос и возвращается объект 
//который теперь можно выполнить с передачей параметра- массива
$stmt->execute(array(
    $name,
    $token,
    $tstamp
));




PM MAIL   Вверх
whatisnot
Дата 14.6.2019, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



webproger,  перепутал вас с автором. smile Это он косячит, это у него непорядки.

А у вас, нет ошибок, кроме лишнего, ведь метки для запроса, а не для массива. Разница в неименованных и именованных такая же как между индексным и ассоциативным массивом - для первых они должны идти в том же порядке как и объявлены в запросе, а для вторых они связаны по именам/ключам.  



Это сообщение отредактировал(а) whatisnot - 14.6.2019, 04:40
PM MAIL   Вверх
Google
  Дата 19.7.2019, 21:31 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0766 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.