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
Форумы портала PHP.SU :: Версия для печати :: Обьясните разницу prepare, bindValue, bindParam,
Форумы портала PHP.SU » » Вопросы новичков » Обьясните разницу prepare, bindValue, bindParam,

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

1. Sitnik - 26 Января, 2013 - 20:01:46 - перейти к сообщению
Все не как не могу понять разницу между 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 - биндим по ссылке выходные параметры.
Но для меня это Китайский язык.
2. halsoft - 26 Января, 2013 - 20:30:52 - перейти к сообщению
С помощью 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 в том, что первый метод принимает только ссылку, а второй универсален.
3. Sitnik - 26 Января, 2013 - 20:43:35 - перейти к сообщению
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 не любит числа. Однако
4. halsoft - 26 Января, 2013 - 20:55:24 - перейти к сообщению
Sitnik пишет:
Все из-за PDO::FETCH_NUM, видимо bindValue не любит числа.


Не совсем правильно написали. FETCH_NUM используется, когда вы получаете данные от бд. В вашем случае нужно использовать PDO::PARAM_INT
5. Sitnik - 26 Января, 2013 - 21:00:51 - перейти к сообщению
Так все таки - что лучше использовать bindValue или bindParam?
(Добавление)
Цитата:
В вашем случае нужно использовать PDO::PARAM_INT

Спасибо! Точно везде стоит Фетч как это я его туда загнал Улыбка)))
6. halsoft - 26 Января, 2013 - 21:09:54 - перейти к сообщению
Sitnik пишет:
Так все таки - что лучше использовать bindValue или bindParam?


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


Спасибо!!! Радость буду везде тыкать bindParam так как звучит БиндПарарааммм Радость
8. halsoft - 26 Января, 2013 - 21:21:59 - перейти к сообщению
PDO::FETCH_NUM везде удалять не надо, может у вас для получения данных используется?

А вот PDO::PARAM_STR вопрос строгости. Если вы поклонник строгой типизации, то пользуйтесь.
9. Sitnik - 26 Января, 2013 - 21:24:48 - перейти к сообщению
halsoft пишет:
PDO::FETCH_NUM везде удалять не надо, может у вас для получения данных используется?

PDO::FETCH_NUM я удалил только при подготовке prepare, тоесть из:
PHP:
скопировать код в буфер обмена
  1.  
  2. $ADDcomment->bindParam(":id_page", $id_page "от сюда" );
  3.  

 

Powered by ExBB FM 1.0 RC1