Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обьясните разницу prepare, bindValue, bindParam,

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: PDO
Sitnik
Отправлено: 26 Января, 2013 - 20:01:46
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Все не как не могу понять разницу между prepare, bindValue, bindParam.

В чем разница?
И самое главное - что в каких случаях нужно использовать?

Вот как пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = $db->prepare("SELECT id,url FROM news WHERE url=:url");
  3. $query->bindValue(":url", $url, PDO::PARAM_STR);
  4.  


Нашел описание:
bindValue - биндим по значению входные параметры,
bindParam - биндим по ссылке входные параметры,
bindColumn - биндим по ссылке выходные параметры.
Но для меня это Китайский язык.

(Отредактировано автором: 26 Января, 2013 - 20:18:18)

 
 Top
halsoft
Отправлено: 26 Января, 2013 - 20:30:52
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Нояб. 2012  
Откуда: The Land of Chechens


Помог: 3 раз(а)




С помощью prepare вы подготавливаете выражение.

С помощью bindParam или bindValue устанавливаете соответствия для указанных в подготовленном выражении параметрами.

Ну вот в вашем примере есть подготовленное выражение

PHP:
скопировать код в буфер обмена
  1. $query = $db->prepare("SELECT id,url FROM news WHERE url=:url");


А вот этой строчкой вы устанавливаете соответствие для :url, что вместо него должен отправить скрипт.

PHP:
скопировать код в буфер обмена
  1. $query->bindValue(":url", $url, PDO::PARAM_STR);


PDO::PARAM_STR - с помощью этого флага вы говорите, что в :url будет только строка, то бишь тип данных string.

Отличие bindParam от bindValue в том, что первый метод принимает только ссылку, а второй универсален.


-----
Хорошие дела улучшают настроение, делают жизнь счастливей, а людей человеками.
 
 Top
Sitnik
Отправлено: 26 Января, 2013 - 20:43:35
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




halsoft
Получается что лучше использовать bindParam чем универсальный bindValue...
В некоторых случаях у меня bindValue не работает... тоже не могу понять почему.
Вот в этом примере выдает ошибку:
PHP:
скопировать код в буфер обмена
  1.  
  2. $ADDcomment->bindValue":id_page", $id_page, PDO::FETCH_NUM, 10);
  3.  

(Добавление)
Кажется понял почему выдает ошибку в :
PHP:
скопировать код в буфер обмена
  1.  
  2. $ADDcomment->bindValue":id_page", $id_page, PDO::FETCH_NUM, 10);
  3.  

Все из-за PDO::FETCH_NUM, видимо bindValue не любит числа. Однако
 
 Top
halsoft
Отправлено: 26 Января, 2013 - 20:55:24
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Нояб. 2012  
Откуда: The Land of Chechens


Помог: 3 раз(а)




Sitnik пишет:
Все из-за PDO::FETCH_NUM, видимо bindValue не любит числа.


Не совсем правильно написали. FETCH_NUM используется, когда вы получаете данные от бд. В вашем случае нужно использовать PDO::PARAM_INT


-----
Хорошие дела улучшают настроение, делают жизнь счастливей, а людей человеками.
 
 Top
Sitnik
Отправлено: 26 Января, 2013 - 21:00:51
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Так все таки - что лучше использовать bindValue или bindParam?
(Добавление)
Цитата:
В вашем случае нужно использовать PDO::PARAM_INT

Спасибо! Точно везде стоит Фетч как это я его туда загнал Улыбка)))
 
 Top
halsoft
Отправлено: 26 Января, 2013 - 21:09:54
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Нояб. 2012  
Откуда: The Land of Chechens


Помог: 3 раз(а)




Sitnik пишет:
Так все таки - что лучше использовать bindValue или bindParam?


Пишут, что в некоторых бд переменные, которые были переданы через bindParam, используются как для отправки данных на бд, так и для получения. В таком случае нужно использовать только bindParam. Во всех остальных случаях, как видится, не принципиально какой из этих методов вы используете. Берите тот метод, который вам больше нравится и удобен ;)


-----
Хорошие дела улучшают настроение, делают жизнь счастливей, а людей человеками.
 
 Top
Sitnik
Отправлено: 26 Января, 2013 - 21:11:48
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Однако Ковырялся, ковырялся и в итоге везде удалил PDO::PARAM_STR и PDO::FETCH_NUM.
Все Равно не вижу в них смысла...
(Добавление)
halsoft пишет:
Пишут, что в некоторых бд переменные, которые были переданы через bindParam, используются как для отправки данных на бд, так и для получения. В таком случае нужно использовать только bindParam. Во всех остальных случаях, как видится, не принципиально какой из этих методов вы используете. Берите тот метод, который вам больше нравится и удобен ;)


Спасибо!!! Радость буду везде тыкать bindParam так как звучит БиндПарарааммм Радость
 
 Top
halsoft
Отправлено: 26 Января, 2013 - 21:21:59
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Нояб. 2012  
Откуда: The Land of Chechens


Помог: 3 раз(а)




PDO::FETCH_NUM везде удалять не надо, может у вас для получения данных используется?

А вот PDO::PARAM_STR вопрос строгости. Если вы поклонник строгой типизации, то пользуйтесь.


-----
Хорошие дела улучшают настроение, делают жизнь счастливей, а людей человеками.
 
 Top
Sitnik
Отправлено: 26 Января, 2013 - 21:24:48
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




halsoft пишет:
PDO::FETCH_NUM везде удалять не надо, может у вас для получения данных используется?

PDO::FETCH_NUM я удалил только при подготовке prepare, тоесть из:
PHP:
скопировать код в буфер обмена
  1.  
  2. $ADDcomment->bindParam(":id_page", $id_page "от сюда" );
  3.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB