Функция ввода в базу

WMix

герр M:)ller
Партнер клуба
Функция ввода в базу

PHP:
function InsertArray($daten,$table=false)
{ //FORMAT $daten[zeile][spalte]=value

	while (list ($step,$array) = each ($daten))
	{
		while (list ($key,$value) = each ($step))
			$teile[]="$key='$value'";

		$set=implode(", ",$teile);
		unset($teile);
		
		echo "INSERT INTO $table SET ".$set."<br>";
	}
}
//InsertArray(array(array("id"=>1,"name"=>"WMix")),"users")
всем привет
такой вопрос
во внутреннем цикле
{
$teile[]="$key='$value'";
}
$set=implode(", ",$teile);
unset($teile);

делаю SET для запроса ну и чтоб проставить зпт
использую 2 оператора и масив :( много
как бы Вы написали этот кусочек?
 

Demiurg

Guest
Собирай запрос вида
insert into table(id , name) values(1,'WMix') , (2,'WMix again') , ...
и вставляй все одним запросом.
 

WMix

герр M:)ller
Партнер клуба
Один запрос согласен (об этом не думаю !! а надо !!)
а как на счёт "2 операторов и масива" можно ли здесь сократить?
 

ForJest

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

.des.

Поставил пиво кому надо ;-)
1. Очень странный входной формат... имена полей для каждого значения дублируются :( это плохо и не нужно.
2. Ну раз такой формат и переписывать не хочется я бы сделал так.
$daten=array(array('id'=>1,'name'=>'WMix'),array('id'=>2,'name'=>'ForJest'),array('id'=>3,'name'=>'.des.'));

PHP:
function insert($daten,$table)
{
	function values(&$item,$key)
	{
		$item="('".implode("','",$item)."')";
	}
	array_walk($daten,'values');
	return 'INSERT INTO '.$table.' ('.implode(',',array_keys($daten[0])).') VALUES '.implode(',',$daten);
}
 

WMix

герр M:)ller
Партнер клуба
хоть и поздно но мой ответ такой

PHP:
function InsertArray($daten,$table=false)
	{ //FORMAT $daten[zeile][spalte]=value
    	$arr=array(); 
		foreach($daten as $zeilen) 
			$arr+=$zeilen; 
			
    	$rows=array_keys($arr);
		$rows_anzahl=count($rows);
		
		reset($daten);

		while (list ($step,$array) = each ($daten))
		{
			$val=array();
			reset($rows);
			while (list($nr,$row)=each($rows))
			{
				$val[$row]=(isset($daten[$step][$row]))?("'".$daten[$step][$row]."'"):("''");
			}
			
			$VALUES[$step]="(".implode(",",$val).")";
		}
		return "INSERT INTO ".$table." ".implode(",",$rows)." VALUES ".implode(" , ",$VALUES);
	}
спасибо всем
 
Сверху