Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Foreach i MySQL INSERT

0 views
Skip to first unread message

The87Boy

unread,
Nov 20, 2008, 4:14:35 PM11/20/08
to
Er det ikke muligt at indsætte flere værdier i en MySQL-database vha.
Foreach?

Altså noget ligende dette:
foreach ($ids AS $id) {
$deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
`skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
$mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
}


Ovenstående er testen, men det virker ikke efter hensigten, og jeg har
testet, at $ids er et array, og at den udskriver alle id som $id

Dan Storm

unread,
Nov 20, 2008, 4:33:15 PM11/20/08
to
The87Boy skrev:

> Altså noget ligende dette:
> foreach ($ids AS $id) {
> $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> `skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
> $mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
> }
>
>
> Ovenstående er testen, men det virker ikke efter hensigten, og jeg har
> testet, at $ids er et array, og at den udskriver alle id som $id

Du må komme med nogle flere oplysninger.

Hvad forventer du der skal ske?
Hvad sker der i stedet for det forventede?

Umiddelbart vil jeg tro at du får flere linier i som bare er ens?


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Johan Holst Nielsen

unread,
Nov 21, 2008, 3:37:06 AM11/21/08
to

$ids = array();
$ids[27] =
array('from'=>'abc','mpid'=>'123','skrv'=>'a','svr1'=>'1','svr2'=>'2');
$ids[128] =
array('from'=>'dfg','mpid'=>'567','skrv'=>'b','svr1'=>'10','svr2'=>'20');

foreach($ids as $id=>$info) {


$deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,

skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$info['from']."',
'".$info['mpid']."', '".$info['skrv']."', '".$info['svr1']."',
'".$info['svr2']."')");
}

Ved ikke om det er noget ala det du forestiller dig?

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

The87Boy

unread,
Nov 21, 2008, 4:20:05 AM11/21/08
to
On 20 Nov., 22:33, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:
> The87Boy skrev:
>
> > Altså noget ligende dette:
> > foreach ($ids AS $id) {
> > $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> > `skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
> > $mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
> > }
>
> > Ovenstående er testen, men det virker ikke efter hensigten, og jeg har
> > testet, at $ids er et array, og at den udskriver alle id som $id
>
> Du må komme med nogle flere oplysninger.
>
> Hvad forventer du der skal ske?
> Hvad sker der i stedet for det forventede?
>
> Umiddelbart vil jeg tro at du får flere linier i som bare er ens?

Jeg forventer, at den indsætter alle ids fra $ids med de samme
informationer ved hvert id, men den indsætter kun det første id, og så
indsætter den ikke mere
Den indsætter ikke samme id flere gange, da denne er unik

The87Boy

unread,
Nov 21, 2008, 4:21:04 AM11/21/08
to

Det er det ikke, da det kun er idét, der forandres ikke de andre
variabler

Johan Holst Nielsen

unread,
Nov 21, 2008, 4:24:26 AM11/21/08
to
The87Boy wrote:
>> foreach($ids as $id=>$info) {
>> $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
>> skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$info['from']."',
>> '".$info['mpid']."', '".$info['skrv']."', '".$info['svr1']."',
>> '".$info['svr2']."')");
>>
>> }
>>
>> Ved ikke om det er noget ala det du forestiller dig?
>
> Det er det ikke, da det kun er idét, der forandres ikke de andre
> variabler

$skrv = 'foo';
$svr1 = 'bar';
$svr2 = 'bar2';
$mpid = '123';

$ids = array(1,2,3,4,5,6,7);
foreach($ids as $id) {


mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`, `skrevet`,

`svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".$mpid."',

'".$skrv."', '".$svr1."', '".$svr2."')");
}

Virker - med mindre du har en fejl i din SQL.

The87Boy

unread,
Nov 21, 2008, 4:28:08 AM11/21/08
to

Jeg har testet på alle mulige måder, om der skulle være en fejl, men
det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
Er der ellers andre måder, jeg kan gøre det på?

Dan Storm

unread,
Nov 21, 2008, 4:36:56 AM11/21/08
to
The87Boy skrev:

> Jeg forventer, at den indsætter alle ids fra $ids med de samme
> informationer ved hvert id, men den indsætter kun det første id, og så
> indsætter den ikke mere
> Den indsætter ikke samme id flere gange, da denne er unik

Prøv at gøre således:
foreach( $ids AS $id )
{
$sql = "
INSERT INTO
Id
(
id,
fraid,
mappeid,
skrevet,
svar1,


svar2
)
VALUES
(
'".$id."',
'".$from."',

'".$mpid."',


'".$skrv."',
'".$svr1."',
'".$svr2."'
)

";
if( !mysql_query($sql) )
echo "Fejl ved id ".$id.": ".mysql_error()."<br />";
else
echo "Indsat id ".$id." korrekt.<br />";
}

og så se om den ikke skriver noget ud til dig.

Johan Holst Nielsen

unread,
Nov 21, 2008, 4:37:32 AM11/21/08
to
The87Boy wrote:
>>
>> Virker - med mindre du har en fejl i din SQL.
>
> Jeg har testet på alle mulige måder, om der skulle være en fejl, men
> det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
> Er der ellers andre måder, jeg kan gøre det på?

Du bliver nødt til at vise mig hele sourcen så... der er i hvert fald
ikke en fejl i de cirka 10 linjer jeg skrev - med mindre det er i SQL'en.

Upload evt. en .phps til din server og send et link - husk at fjerne
evt. passwords fra sourcen.

The87Boy

unread,
Nov 21, 2008, 4:40:23 AM11/21/08
to

Tak for hjælpen :D
Jeg havde glemt at sætte det andet id til auto_increment, derfor satte
den jo kun den første værdi ind

The87Boy

unread,
Nov 21, 2008, 4:42:19 AM11/21/08
to
On 21 Nov., 10:37, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> The87Boy wrote:
>
> >> Virker - med mindre du har en fejl i din SQL.
>
> > Jeg har testet på alle mulige måder, om der skulle være en fejl, men
> > det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
> > Er der ellers andre måder, jeg kan gøre det på?
>
> Du bliver nødt til at vise mig hele sourcen så... der er i hvert fald
> ikke en fejl i de cirka 10 linjer jeg skrev - med mindre det er i SQL'en.
>
> Upload evt. en .phps til din server og send et link - husk at fjerne
> evt. passwords fra sourcen.

Det var alligevel MySQL'en, der var fejl
Det var det andet id, jeg havde glemt en auto_increment på

Johan Holst Nielsen

unread,
Nov 21, 2008, 4:58:17 AM11/21/08
to

Hehe fair nok. Som Dan også skriver - så kan et output af mysql_error()
typisk hjælpe dig med den slags fejl...

evt blot

mysql_query($sql) or die(mysql_error());

Så er jeg sikker på du havde fanget fejlen betydeligt hurtigere.

The87Boy

unread,
Nov 21, 2008, 5:17:19 AM11/21/08
to
On 21 Nov., 10:58, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> The87Boy wrote:
> > On 21 Nov., 10:37, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> >> The87Boy wrote:
>
> >>>> Virker - med mindre du har en fejl i din SQL.
> >>> Jeg har testet på alle mulige måder, om der skulle være en fejl, men
> >>> det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
> >>> Er der ellers andre måder, jeg kan gøre det på?
> >> Du bliver nødt til at vise mig hele sourcen så... der er i hvert fald
> >> ikke en fejl i de cirka 10 linjer jeg skrev - med mindre det er i SQL'en.
>
> >> Upload evt. en .phps til din server og send et link - husk at fjerne
> >> evt. passwords fra sourcen.
>
> > Det var alligevel MySQL'en, der var fejl
> > Det var det andet id, jeg havde glemt en auto_increment på
>
> Hehe fair nok. Som Dan også skriver - så kan et output af mysql_error()
> typisk hjælpe dig med den slags fejl...
>
> evt blot
>
> mysql_query($sql) or die(mysql_error());
>
> Så er jeg sikker på du havde fanget fejlen betydeligt hurtigere.

Okay, kan den oplyse det?

Johan Holst Nielsen

unread,
Nov 21, 2008, 5:21:32 AM11/21/08
to
The87Boy wrote:
>> mysql_query($sql) or die(mysql_error());
>>
>> Så er jeg sikker på du havde fanget fejlen betydeligt hurtigere.
>
> Okay, kan den oplyse det?

Den vil i hvert fald komme med en fejl som vil lede sig rigtigt.

1. Du ved det er i SQL'en der er fejl
2. Den vil formentlig fortælle at din ID ikke er unikt selvom du har sat
det til primary key.

Leif Neland

unread,
Nov 21, 2008, 6:48:33 AM11/21/08
to

"The87Boy" <the8...@gmail.com> skrev i en meddelelse
news:cf8e77d4-ea8b-4933...@x14g2000yqk.googlegroups.com...

> Er det ikke muligt at indsætte flere værdier i en MySQL-database vha.
> Foreach?

> Altså noget ligende dette:
> foreach ($ids AS $id) {
> $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> `skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
> $mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
> }

Den SQL-inject-sikrede metode, der bruger mysqli og prepared statements

$db = new mysqli("localhost", "db_username", "db_password", "db_name");
if (mysqli_connect_errno())
{
die("Connect failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO `Id` (`id`, `fraid`, `mappeid`,`skrevet`, `svar1`,
`svar2`) values (?,?,?,?,?,?)
if ($stmt = $db->prepare($sql))
{
$stmt->bind_param("iiisss", $id, $from, $mpid, $skrv,$svr1,$svr2);
foreach($ids as $id) {
$stmt->execute();
}
$stmt->close();
}
else
{
die("Could not prepare SQL statement: $sql");
}
$mysqli->close();

Leif


0 new messages