Вывести запрос INSERT в цыкле как лутше сделать?

Kochevnik

Новичок
Есть табличка и в нее надо добавить такие данные:
INSERT INTO `name_team` (`id_team`, `name_team`, `country`) VALUES
(1, 'Шахтер Д', 1),
(2, 'Динамо К', 1),
(3, 'Металлист', 1),
(4, 'Днепр Дн', 1),
(5, 'Карпаты', 1),
(6, 'Арсенал К', 1),
(7, 'Таврия', 1),
(8, 'Металлург Д', 1),
(9, 'Волынь', 1),
(10, 'Ворскла', 1),
(11, 'Заря', 1),
(12, 'Оболонь', 1),
(13, 'Ильичевец', 1),
(14, 'Кривбасс', 1),
(15, 'ПФК Севастополь', 1),
(16, 'Металлург З', 1);
как это сделать на php чтоб вывести в цикле такие данные и должен получится такой результат
INSERT INTO `name_team` (`id_team`, `name_team`, `country`)$values;
Чтоб данные вставлялись одним запросом а не делать 16 запросов на вставку.
Можете посоветовать как лучше сделать?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ты не знаешь как массив сделать? Чтобы каждый элемент массива был в виде (14, 'Кривбасс', 1), а потом сделать ему join(",", $array); ?
 

Kochevnik

Новичок
Я просто не могу додуматься как поставить запятую везде кроме последней строчки)
 

Kochevnik

Новичок
Вот что получилось у меня
PHP:
$sql = $db->query("SELECT name_team, country FROM `name_team`");
while($row = $db->get_row($sql)) 
{
  $test[]="(".implode(",", array("'".$row['name_team']."'", $row['country'])).")";
}
$value=implode(",", $test);
$db->query("INSERT INTO `roulette_sports`.`test`(`name` ,`country`) VALUES $value");
все работает работает но есть сомнения что мне новичку что это не правильно написано ) профессионалы посоветуйте может что то неправильно делаю подскажите ошибки)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Если работает - ничего не трогай, ничего не меняй =)
 

zerkms

TDD infected
Команда форума
Kochevnik
единственное - это добавь экранирование для каждого из строковых значений. Для mysql_* это будет mysql_real_escape_string. Для твоего класса работы с БД - смотри сам, хз что ты там юзаешь.
 

Kochevnik

Новичок
zerkms
Юзаю DLE) а на моем примере можешь показать что ты имел ввиду а то чуток не понял и зачем это нужно? расшифруй пож.
 

zerkms

TDD infected
Команда форума
Kochevnik
Почитай документацию к функции, которую я указал. А потом в классе объекта $db посмотри функцию с похожим именем, или чем-то вроде escape.
 

Kochevnik

Новичок
PHP:
function safesql( $source )
	{
		if ($this->db_id) return mysql_real_escape_string ($source, $this->db_id);
		else return mysql_escape_string($source);
	}
Если правильно вас понял то эта функция
Вот только куда это вставить тяжко мои мысли остановились на таком результате:
PHP:
$sql = $db->query("SELECT name_team, country FROM `name_team`");
$db->safesql($name_);
while($row = $db->get_row($sql)) 
{
  $db->safesql($row['name_team']);
  $test[]="(".implode(",", array("'".$row['name_team']."'", $row['country'])).")";
}
$value=implode(",", $test);
$db->query("INSERT INTO `roulette_sports`.`test`(`name` ,`country`) VALUES $value");
или к INSERT тоже нужно что то делать?
 

zerkms

TDD infected
Команда форума
PHP:
$db->safesql($row['name_team'])
И вот таким макаром ты должен вставлять все переменные, которые подставляются в запрос, а не просто $row['name_team']
 

zerkms

TDD infected
Команда форума
Более того, если всё, что тебе нужно - это вставить данные из одной таблы в другую - то ты можешь это сделать одним запросом:

PHP:
INSERT INTO `test`(`name` ,`country`) SELECT name_team, country FROM `name_team`
 

zerkms

TDD infected
Команда форума
Kochevnik
Если переменная - целое число, тогда нужно применить модификатор (int)

PHP:
(int)$var
И, естественно, в этом случае никаких кавычек вокруг (потому что это не строковый литерал, очевидно).
 
Сверху