Массив в базу данных

OneFinal

Новичок
есть массив вида
$arr[1] $arr[2] $arr[3] $arr[4]
его нужно занести в базу в одну таблицу
скрипт вида
PHP:
$sql = array();
foreach(array_combine($arr[2],$arr[3],$arr[4],$arr[5]) as $key => $val)
    $sql[] = '("' . (int)$key . '", "' . mysql_real_escape_string($val) . '")';
$sql1 = mysql_query("INSERT INTO `test` (`img`,`id`,`name`,`attack`) VALUES " . implode(`,`,`,`,$sql)) or die(mysql_error());
не подходит, подкиньте решение уже 2 дня бьюсь
 

Redjik

Джедай-мастер
перепиши его с PDO или mysqli с препаредами - а то адово
пол дня займет
 

Фанат

oncle terrible
Команда форума
OneFinal
Не могу понять смысл запроса. ерунда какая-то получается.
Приведи пример данных и желаемого запроса.

И откуда берутся эти массивы.
 

Фанат

oncle terrible
Команда форума
"Ты не умничай, ты пальцем покажи"
Напиши препаредами любой запрос с динамическим числом переменных, вот как этот множественный инсерт.
А мы посмотрим.

Да, я понимаю, что препаредами можно кучей запросов. Но, во-первых, об этом надо было сказать явно, а во-вторых, ясности это прибавит не сильно.
 

Redjik

Джедай-мастер
Я показал пальцем, точно так же начинал, на форуме зарегался через 5 месяцев как начал заниматься программированием, мне точно так же отвечали, я открывал гугл и смотрел, что за незнакомые слова попадаются.
Искал, копал, развивался.

Но если надо именно "ткнуть" - http://www.php.net/manual/en/pdostatement.bindvalue.php самый первый пример.
Проблема то как раз в том, что большинство лениться лишний раз доку открыть.

ЗЫ. я массивы через ? aka question mark стараюсь делать, такие примеры в доке тоже есть.
 

OneFinal

Новичок
массивы наполняються через preg_match_all();

пример массива

PHP:
    [1] => Array
        (
            [0] => 115000917
            [1] => 115000916
            [2] => 115000915
        )

    [2] => Array
        (
            [0] => Щит R1 C асмодианина 54-го уровня
            [1] => Щит R1 B асмодианина 54-го уровня
            [2] => Щит R1 A асмодианина 54-го уровня
        )

    [3] => Array
        (
            [0] => 54
            [1] => 54
            [2] => 54
        )

    [4] => Array
        (
            [0] => -
            [1] => -
            [2] => -
        )
 

Фанат

oncle terrible
Команда форума
Andkorol
имплод действительно написан криво, но твой вариант тоже не годится - смотри внимательно на запрос

Иван Redjik Матвеев
"пальцем покажи" в контексте процитированного мной анекдота как раз означает, что не умные слова требуются, а конкретная реализация.
код показать.
 

Фанат

oncle terrible
Команда форума
OneFinal
Очень хорошо.
Теперь напиши пример запроса, который хочешь из этих данных получить.
(Программист должен это делать всегда, если не хочет 2 дня биться)
 

OneFinal

Новичок
я их хочу запихнуть в таблицу вида

PHP:
CREATE TABLE `test` (
  `nomer` int(11) NOT NULL AUTO_INCREMENT,
  `id` text CHARACTER SET cp1251,
  `name` text CHARACTER SET cp1251,
  `level` text,
  `attack` text,
  PRIMARY KEY (`nomer`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 

Фанат

oncle terrible
Команда форума
Очень хорошо.
Теперь напиши пример запроса, которым хочешь вставить эти данные в эту таблицу.
 

OneFinal

Новичок
так в том то и дело что в массив попадает только array когда было 2 массива я их крепил таким способом

PHP:
$sql = array();
foreach(array_combine($res[1], $res[2]) as $key => $val)
    $sql[] = '("' . (int)$key . '", "' . mysql_real_escape_string($val) . '")';
$sql1 = mysql_query("INSERT INTO `test` (`id`,`name`) VALUES " . implode(', ', $sql)) or die(mysql_error());
с 4 массивами array_combine не работает..
 

Фанат

oncle terrible
Команда форума
Ты не понял.
Не РНР код, а SQL запрос. Который можно отправить в базу данных.
 

OneFinal

Новичок
PHP:
INSERT INTO `test` (`id`,`name`) VALUES " . implode(', ', $sql)) or die(mysql_error());
это имеется в веду?
 

Placido

Наблюдаю
Имеется в виду вот это:
PHP:
INSERT INTO `test` (`img`,`id`,`name`,`attack`) 
VALUES 
('shield1.png', 115000915, 'Щит R1 A асмодианина 54-го уровня', 54), 
('shield2.png', 115000916, 'Щит R1 B асмодианина 54-го уровня', 54), 
('shield3.png', 115000917, 'Щит R1 C асмодианина 54-го уровня', 54);
Таким должен быть запрос?
 

Фанат

oncle terrible
Команда форума
OneFinal
в SQL нет оператора implode.
то, что ты написал - это кусок РНР кода.
А нужен - обязательно нужен - SQL запрос.

потому что единственная цель твоего кода - это составить SQL запрос.
А это значит, что ты должен четко себе его представлять. Видеть перед собой.
Иначе, если ты не знаешь, ЧТО хочешь получить, то ты никогда этого не получишь. Логично?
 

OneFinal

Новичок
верно, смотрите если я буду писать что по подобное этому
PHP:
INSERT INTO `test` (`id`,`name`) VALUES "$arr[2],$arr[3]";
то мне в базу попадет просто array
 
Сверху