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 :: Запись массива в БД MySQL

 PHP.SU

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


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

> Без описания
Curse
Отправлено: 10 Октября, 2010 - 22:22:49
Post Id


Новичок


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


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




Подскажите, пожалуйста, как записать массив, полученный функцией preg_match в базу данных MySQL.
Массив типа:
[Bindable] => Bind on Acquire
[Equipment_Slot] => Light Armour
[Armour_Value] => 56 Armour

Пробовал
PHP:
скопировать код в буфер обмена
  1. <?PHP $sql = "INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".implode("','", array_values($result))."');";
  2. echo mysql_error();
  3. ?>

Не получилось
 
 Top
OrmaJever Модератор
Отправлено: 10 Октября, 2010 - 23:57:02
Post Id



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


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


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




Можно например цыклом...
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $array = array('1' => 'a', '2' => 'b');
  3.  
  4. foreach($array as $key => $value)
  5. {
  6.  mysql_query("INSERT INTO En_Cloaks (key, value) values ('".$key."', '".$value."')";
  7. }
  8. ?>

это если я правельно понял))


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Curse
Отправлено: 11 Октября, 2010 - 00:13:11
Post Id


Новичок


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


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  $cod = file_get_contents('mysite/index');
  3.     $regexps = array(
  4.        набираю массив регулярными выражениями
  5.    );
  6.    foreach ($regexps as $key => $exp)
  7.        if (preg_match($exp, $cod, $match)) $result[$key] = $match[1];
  8. ?>
  9.  
  10. <pre>
  11. <?PHP print_r($result); ?>
  12. </pre>
  13. //полученный массив выводится нормально
  14.  
  15. <?PHP
  16. $sql = "INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".implode("','", array_values($result))."');";
  17. echo mysql_error();
  18. //ничего не происходит
  19. ?>

строка
PHP:
скопировать код в буфер обмена
  1.  mysql_query("INSERT INTO En_Cloaks (key, value) values ('".$key."', '".$value."')";

выдает Parser Error
Я хочу записать массив $result в Базу данных.
[Bindable] => Bind on Acquire
[Equipment_Slot] => Light Armour
[Armour_Value] => 56
Слова в квадратных скобках - поля таблицы, после знака => значения.

(Отредактировано автором: 11 Октября, 2010 - 00:15:28)

 
 Top
Uchkuma
Отправлено: 11 Октября, 2010 - 08:34:08
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Curse пишет:
Пробовал
...
Не получилось
Curse, где в вашем листинге вызов mysql_query?

Curse пишет:
выдает Parser Error
Забыли закрыть скобку у функции. Но все равно это неверный вариант.
OrmaJever пишет:
Можно например цыклом...
Неверный вариант.
 
 Top
Curse
Отправлено: 11 Октября, 2010 - 14:50:42
Post Id


Новичок


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


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




Uchkuma пишет:
Curse, где в вашем листинге вызов mysql_query?

Выше в коде
PHP:
скопировать код в буфер обмена
  1.  $db  =  "";  //Имя  базы  данных
  2.     $user  =  "";  //Пользователь  сервера  баз  данных
  3.     $pass  =  "";  //Пароль
  4.     $server  =  "localhost";  //Имя  сервера
  5.     //Создание  соединения
  6.     $link  =  mysql_connect($server,  $user,  $pass);
  7.     if(!$link)  die("Не  могу  соединиться  с  MySQL");
  8.     mysql_select_db($db)  or  die("Не  могу  открыть  $db:  ".mysql_error());

Далее идёт код, приведенный в предыдущем сообщении.
 
 Top
Uchkuma
Отправлено: 11 Октября, 2010 - 15:03:04
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Я, наверное, слепой. Ткните пальцем, в какой строке?
 
 Top
Curse
Отправлено: 11 Октября, 2010 - 20:19:19
Post Id


Новичок


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


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




Uchkuma пишет:
Я, наверное, слепой. Ткните пальцем, в какой строке?

Извините, я на тот момент менял код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. mysql_query("INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".implode("','", array_values($result))."');");
  3. echo mysql_error();
  4. ?>


Выдавал: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Cloak','Bind on Acquire','Light Armour ','56')' at line 1
 
 Top
Uchkuma
Отправлено: 11 Октября, 2010 - 20:56:51
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




PHP:
скопировать код в буфер обмена
  1. mysql_query("INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".mysql_real_escape_string(implode("','", array_values($result)))."');");
В названии пальто попалась одинарная кавычка.
(Добавление)
Я погорячился. Так не прокатит, конечно же. Экранировать надо каждое название в отдельности, а не всю сформированную строку целиком.
 
 Top
Curse
Отправлено: 11 Октября, 2010 - 21:13:19
Post Id


Новичок


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


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




Спасибо, теперь проблема, появляется сообщение "Column count doesn't match value count at row 1"
первое поле у меня ID, Not Null, AutoIncrement, Unique, Primary Key, тип:integer 11.
Разве параметр AutoIncrement не должен автоматически присваивать записи номер?
 
 Top
Uchkuma
Отправлено: 11 Октября, 2010 - 23:08:23
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Curse пишет:
Разве параметр AutoIncrement не должен автоматически присваивать записи номер?
При чем тут это? Вам говорят "количество столбцов не совпадает с количеством значений".
 
 Top
zardoz
Отправлено: 12 Октября, 2010 - 02:07:05
Post Id


Гость


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


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




Curse, эффективнее будет собрать нужную строку-команду и выполнить одним запросом, например.
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO En_Cloaks (Bindable, Equipment_Slot, Armour_Value)
  2. SELECT "Bind on Acquire","Light Armour","56" UNION ALL
  3. SELECT "Bind on Acquire1","Dark Armour","66" UNION ALL
  4. SELECT "Bind on Acquire2","Blue Armour","76" UNION ALL
  5. ...
  6. SELECT "Bind on Acquire90","Green Armour","156"

1-ую строку присваиваете до начала цикла.
Остальные прибавляете к строке в цикле. Полученное выражение используете 1 раз в запросе mysql_query().

С уважением.
P.S. При полученном целиком SQL-запросе проще и ошибки высмотреть.

(Отредактировано автором: 12 Октября, 2010 - 02:07:49)

 
 Top
Curse
Отправлено: 12 Октября, 2010 - 05:56:15
Post Id


Новичок


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


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




Uchkuma, я предполагал, что команда действует следующим образом: INSERT INTO имя таблицы (список полей через запятую) VALUES(список значений через запятую);
То есть не тронутым полям присваивается значение по умолчанию... я не прав?

zardoz, да было бы проще, но за 1 цикл я получаю только 1 строку таблицы
PHP:
скопировать код в буфер обмена
  1.  $cod = file_get_contents('http://localhost/Armour:Harbinger%27s_Cloak');
  2.     $regexps = array(
  3.         массив
  4.    );


В массив набираются найденные значения по типу "[Имя поля] => значение". И заранее я не знаю, какие поля существуют в документе, а каких нет. После прохождения по документу мне нужно записать данные массива в таблицу.
Какие то поля остаются без значений. Что в таком случае делать?
 
 Top
zardoz
Отправлено: 12 Октября, 2010 - 20:35:48
Post Id


Гость


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


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




Curse пишет:
То есть не тронутым полям присваивается значение по умолчанию... я не прав?

Значение по умолчанию присваивается полям которые не перечислены в списке полей INSERT INTO имя таблицы (список полей через запятую).... Если поле указано в этом списке то нужно задать ему значение в VALUES(список значений через запятую)

Curse пишет:
И заранее я не знаю, какие поля существуют в документе

Не понял И что вы делаете с полями которых еще нет в БД но есть в документе?

С уважением.
 
 Top
Uchkuma
Отправлено: 12 Октября, 2010 - 21:03:17
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Curse, выведите мне echo уже сформированной строки запроса.
 
 Top
Curse
Отправлено: 12 Октября, 2010 - 21:05:23
Post Id


Новичок


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


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




я не могу перечислить список полей через запятую, потому что не знаю какие из них окажутся с пустыми значениями в массиве.
zardoz пишет:
И что вы делаете с полями которых еще нет в БД но есть в документе?

В БД все поля есть, а вот в массив заносятся только те поля, которым присвоены данные, найденные в документе. Поэтому и возникла проблема с записью массива. MySQL видимо ждет данных по всем полям, а на запись идут только поля со значениями.
(Добавление)
Uchkuma пишет:
Curse, выведите мне echo уже сформированной строки запроса.

Извините, как это сделать?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB