[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PDOStatement::bindParam
maax
Непойму как правильно написать,че то ругается на $row->execute();

$row = $cnt->prepare('UPDATE users SET size = $size WHERE login = ?'); 
$row->bindParam(1, $login);
$row->execute();
kristall
У тебя в prepare одна псевдопеременная, а в байнде -- два параметра.

упс, фигню по памяти написал.

_____________
echo '<pre>',print_r($var, 1);die;

root@server# make love && war
Razzwan
$login = 'Login';
$row = $cnt->prepare('UPDATE users SET size = $size WHERE login = ?');
$row->bindParam($login);
$row->execute();
или
$login = 'Login';
$size = 4;
$row = $cnt->prepare('UPDATE users SET size = ? WHERE login = ?');
$row->bindParam($size, $login);
$row->execute();

Второй вариант правильнее.

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
kristall
$row = $cnt->prepare('UPDATE `users` SET `size` = :size WHERE `login` = :login'); 
$row->execute([':size' => $size, ':login' => $login]);

Еще вот так можно.

Но скорее всего дело не в этом. Текст ошибки какой?

_____________
echo '<pre>',print_r($var, 1);die;

root@server# make love && war
maax
kristall

этот вариант вроде хорошо работает:

$row = $cnt->prepare('UPDATE `users` SET `size` = :size WHERE `login` = :login'); 
$row->execute([':size' => $size, ':login' => $login]);


а вот этот уже выдает ошибку

$login = 'Login';
$size = 4;
$row = $cnt->prepare('UPDATE users SET size = ? WHERE login = ?');
$row->bindParam($size, $login);
$row->execute();


Цитата
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in /var/www/--------/data/www/--------/--------.php:56 Stack trace: #0 /var/www/--------/data/www/--------/--------.php(56): PDOStatement->execute() #1 {main} thrown in /var/www/--------/data/www/--------/--------.php on line 56
AllesKlar
maax
Цитата (maax @ 5.09.2015 - 15:06)
а вот этот уже выдает ошибку

Читай документацию, она уже и на русском и с примерами :blink:
$login = 'Login';
$size = 4;
$row = $cnt->prepare('UPDATE users SET size = ? WHERE login = ?');
$row->bindParam($size, $login);


Разбираем:
1. Логин = "Логин"
2. $row->bindParam($size, $login);
Имеем, что в параметр с номером ЧЕТЫРЕ нужно подставить значение "Логин".

WTF??? У тебя всего два параметра, и какого почему ты номер параметра называешь $size ? Хотя, это лично твой фен-шуй.

Не, я , конечно же понял, что ты "хотел", но ОНА ЖЕ УЖЕ И НА РУССКОМ И С ПРИМЕРАМИ!!!

_____________
[продано копирайтерам]
volter9
maax
А почему бы не передать параметры через execute а не bindParam:
$row = $cnt->prepare('UPDATE users SET size = ? WHERE login = ?'); 
$row->execute([$size, $login]);


К стати, у тебя там стоят апострофы, по этой причине у тебя в запросе получается "... SET size = $size ..." а не значение переменной $size (разница ' между и " строками).

_____________
Мой блог
maax
Так что же все таки лучше использовать bindParam ? или сразу через execute ??
AllesKlar
Цитата (maax @ 6.09.2015 - 00:19)
Так что же все таки лучше использовать bindParam ? или сразу через execute ??

Я таки тебя призываю... нет, УМОЛЯЮ почитать документацию.
Там дан ответ на конкретно вот этот твой вопрос.

Мало того, там есть еще функция bindValue()
Поймешь разницу между bindValue() и bindParam() и сразу же, я те обещаю, сразу же поймешь, что лучше в каком случае уместнее использовать bindParam(), в каком bindValue(), а в каком напрямую execute()

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.