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 :: Нужно передать в $stmt->bind_param массив. Просто массив не берется

 PHP.SU

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


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

> Без описания
SkaN
Отправлено: 09 Августа, 2011 - 13:14:52
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011  


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




Есть массив со значениями, допутим их два: ('id'=>'lorem_ipsum', 'name'=>'Lorem Ipsum'). Значения нужно загнать в $stmt->bind_param. Я написал так:
PHP:
скопировать код в буфер обмена
  1. $stmt = $mysqli->prepare(SELECT * FROM `articles` WHERE `id` = ? AND `name` = ?);
  2. $types = "";
  3. foreach ($parsed_array as $k=>$v) {
  4.         if (is_int($v) == TRUE) $types .= "i";
  5.         elseif(is_float($v) == TRUE) $types .= "d";
  6.         else $types .= "s";
  7. }
  8. $stmt->bind_param($types, $parsed_array);
  9. $stmt->execute();

И дебаггер мне возвращает:
Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables
что в принципе логично. Но необходимость использовать массив не отпадает. Как..? Растерялся
(Добавление)
попробовал так:
PHP:
скопировать код в буфер обмена
  1. call_user_func_array($stmt->bind_param(), $parsed_array);
  2. $stmt->execute();

но мне вернулось
Warning: Wrong parameter count for mysqli_stmt::bind_param()
(Добавление)
Попробовал добавить в начало $parsed_array типы переменных массива ("ss"), но все равно та же ошибка.
 
 Top
OrmaJever Модератор
Отправлено: 09 Августа, 2011 - 14:07:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




как выглядит масив $parsed_array ?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
SkaN
Отправлено: 09 Августа, 2011 - 14:08:35
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011  


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




Array (
0=>'ss',
'id'=>'lorem_ipsum',
'name'=>'Lorem Ipsum'
)

(Отредактировано автором: 09 Августа, 2011 - 14:09:31)

 
 Top
OrmaJever Модератор
Отправлено: 09 Августа, 2011 - 14:10:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




SkaN пишет:
Array (
0=>'ss',
'id'=>'lorem_ipsum',
'name'=>'Lorem Ipsum'
)

ну вот так совсем по другому, в масиве 3 параметра.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
SkaN
Отправлено: 09 Августа, 2011 - 14:16:44
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011  


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




плохо... А есть какие-нибудь предложения, как эту вещь можно реализовать?
 
 Top
OrmaJever Модератор
Отправлено: 09 Августа, 2011 - 14:18:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




убрать первое значение масива и оставить только два


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
SkaN
Отправлено: 09 Августа, 2011 - 14:19:54
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011  


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




все равно та же ошибка
 
 Top
OrmaJever Модератор
Отправлено: 09 Августа, 2011 - 14:41:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




а var_dump($types) что показывает?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
SkaN
Отправлено: 09 Августа, 2011 - 14:53:37
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011  


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




string(2) "ss"
 
 Top
SkaN
Отправлено: 10 Августа, 2011 - 10:47:07
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011  


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




все, решено. В официальных доках по этому методу среди комментов есть такая функция:
PHP:
скопировать код в буфер обмена
  1. function refValues($arr){
  2.         if (strnatcmp(phpversion(),'5.3') >= 0) { //Если версия PHP >=5.3 (в младших версиях все проще)
  3.                 $refs = array();
  4.                 foreach($arr as $key => $value) {
  5.                         $refs[$key] = &$arr[$key]; //Массиву $refs присваиваются ссылки на значения массива $arr
  6.                 }
  7.                 return $refs; //Массиву $arr присваиваются значения массива $refs
  8.         }
  9.         return $arr; //Возвращается массив $arr
  10. }

Соответственно $stmt->bing_param вызывается так:
PHP:
скопировать код в буфер обмена
  1. call_user_func_array(array($stmt, 'bind_param'), refValues($array_with_params));
 
 Top
SergPHP
Отправлено: 01 Марта, 2012 - 21:51:05
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2012  


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




Здравствуйте, по образцу набросал такой код
PHP:
скопировать код в буфер обмена
  1. function refValues($arr)
  2. {       if (strnatcmp(phpversion(),'5.3') >= 0) { //Если версия PHP >=5.3 (в младших версиях все проще)
  3.                 $refs = array();
  4.                 foreach($arr as $key => $value) {
  5.                         $refs[$key] = &$arr[$key]; //Массиву $refs присваиваются ссылки на значения массива $arr
  6.                 }
  7.                 return $refs; //Массиву $arr присваиваются значения массива $refs
  8.         }
  9.         return $arr; //Возвращается массив $arr
  10. }//function refValues($arr)
  11.  
  12. $stmt = $db->prepare("SELECT * FROM `users` WHERE `name` = ? and `pass` = ?");
  13. call_user_func_array(array($stmt, 'bind_param'), refValues(array('admin','pass')));
  14. $stmt->execute();

Но:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in Z:\...\index.php on line 26

Fatal error: Call to a member function execute() on a non-object in Z:\...\index.php on line 27

В чем проблема не могу понять, помогите пожалуйста!
 
 Top
OrmaJever Модератор
Отправлено: 01 Марта, 2012 - 21:57:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




$stmt не коректный обьект, http://phpfaq[dot]ru/debug


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 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