|
| sikkert simpelt problem i sql sætning Fra : Lars |
Dato : 10-09-01 21:20 |
|
----------------------------------------
opret_forbindelse();
$opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
('$billedfil_name')";
sql_query($opret_produkt_db1);
$opret_produkt_db2 = "SELECT id FROM billeder WHERE billednavn =
'$billedfil_name'";
$billedid = sql_query($opret_produkt_db2);
$opret_produkt_db3 = "INSERT INTO produkter (navn, beskrivelse, pris,
gender, producentid, billedid) values ('$opretprodukt[0]',
'$opretprodukt[1]', '$opretprodukt[2]', '$opretprodukt[3]',
$opretprodukt[3], $billedid)";
sql_query($opret_produkt_db3);
luk_forbindelse();
----------------------------------------
Hej!
Jeg har en database med tabellerne billeder og produkter, hvor der så er et
unikt billede til hver produkt.
Jeg skal ha' et billedid ind i en tabel, som hedder produkter, som jeg
senere skal bruge i en "join". Så har jeg prøvet at hente et id for et
billede ved at sammenligne et billednavn med det filnavn, der bliver
uploadet og gemt. Billedid'et får jeg også fint ude i mysql prompten med
ovenstående sql sætning, men den vil altså ikke ind i tabellen produkter?!!
Hvordan kan det være?
Eller gør jeg det helt forkert?
på forhånd tak
lars
| |
Lars (10-09-2001)
| Kommentar Fra : Lars |
Dato : 10-09-01 21:24 |
|
glemte lige at sige, at der kommer bare et 0 i tabellen produkter under
billedid
| |
Nis Jorgensen (11-09-2001)
| Kommentar Fra : Nis Jorgensen |
Dato : 11-09-01 11:23 |
|
On Mon, 10 Sep 2001 22:20:27 +0200, "Lars" <ledj@ Zprivat.dk> wrote:
>----------------------------------------
>opret_forbindelse();
>
>$opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
>('$billedfil_name')";
>sql_query($opret_produkt_db1);
>
>$opret_produkt_db2 = "SELECT id FROM billeder WHERE billednavn =
>'$billedfil_name'";
>$billedid = sql_query($opret_produkt_db2);
>
>$opret_produkt_db3 = "INSERT INTO produkter (navn, beskrivelse, pris,
>gender, producentid, billedid) values ('$opretprodukt[0]',
>'$opretprodukt[1]', '$opretprodukt[2]', '$opretprodukt[3]',
>$opretprodukt[3], $billedid)";
>sql_query($opret_produkt_db3);
>
>luk_forbindelse();
>----------------------------------------
>
>Hej!
>Jeg har en database med tabellerne billeder og produkter, hvor der så er et
>unikt billede til hver produkt.
Husk altid at angive:
Hvilket DBMS du bruger
og
Hvordan dine tabeller ser ud
Derudover er det en fordel, hvis du angiver dit problem som "ren" SQL,
snarere end i et eller andet progremmeringssprog som vi så skal lære
syntaxen for.
Anyways, jeg tror dit problem skyldes at billeder.id er et nummerisk
felt, og du prøver at indsætte en streng. Derudover går du over åen
efter vand når du først henter en værdi fra databasen og så sætter den
ind igen. Prøv dette:
opret_forbindelse();
$opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
('$billedfil_name')";
sql_query($opret_produkt_db1);
$opret_produkt_db2 = "
INSERT INTO produkter
(navn, beskrivelse, pris,gender, producentid, billedid)
SELECT
'$opretprodukt[0]', '$opretprodukt[1]', '$opretprodukt[2]',
'$opretprodukt[3]', $opretprodukt[3], id
FROM billeder
WHERE billednavn ='$billedfil_name'
";
sql_query($opret_produkt_db3);
luk_forbindelse();
Alternativt:
$opret_produkt_db2 = "
INSERT INTO produkter
(navn, beskrivelse, pris,gender, producentid, billedid)
VALUES (
'$opretprodukt[0]', '$opretprodukt[1]', '$opretprodukt[2]',
'$opretprodukt[3]', $opretprodukt[3],
(SELECT id FROM billeder
WHERE billednavn ='$billedfil_name')
)";
hvis dit DBMS bedre kan lide det på den måde.
| |
Lars (11-09-2001)
| Kommentar Fra : Lars |
Dato : 11-09-01 14:44 |
|
> Husk altid at angive:
>
> Hvilket DBMS du bruger
MySQL (med PHP)
> og
>
> Hvordan dine tabeller ser ud
Produktertabellen:
id (int) navn(varchar) beskrivelse (blob) pris(varchar) gender(enum)
producentid(int) billedid(int)
Billedertabellen:
id (int) billednavn(varchar)
SELECT id FROM billeder WHERE billednavn = '$billedfil_name'
$billedid = sql_query($opret_produkt_db2); /* en variabel, som bliver
smidt ned i næste sqlsætning */
INSERT INTO produkter (navn, beskrivelse, pris, gender, producentid,
billedid) values
('$opretprodukt[0]', '$opretprodukt[1]', '$opretprodukt[2]',
'$opretprodukt[3]', 2, $billedid)";
Det eneste jeg skal ha' gjort er at hente id'et fra billedertabellen og
smide det ind i billedidfeltet i produktertabellen. Jeg kan stadig ikke få
den til det. Det burde være samme datatype, da det bliver hentet fra et id
felt med samme datatype, som det bliver sat ind i produktertabellen. Hvis
jeg derimod bare skrive tallet 2 der, hvor $billedid står, så skriver den
fint tallet ind i feltet, men det er jo lisom værdien i variablen $billedid,
der skal sættes ind i stedet, så det hele kommer til at virke.
| |
Lars (11-09-2001)
| Kommentar Fra : Lars |
Dato : 11-09-01 22:38 |
|
> $billedid = sql_query($opret_produkt_db2); /* en variabel, som bliver
> smidt ned i næste sqlsætning */
>
> INSERT INTO produkter (navn, beskrivelse, pris, gender, producentid,
> billedid) values
> ('$opretprodukt[0]', '$opretprodukt[1]', '$opretprodukt[2]',
> '$opretprodukt[3]', 2, $billedid)";
Hej igen!
Nu har jeg løst problemet! Man kan ikke sætte en variabel i PHP lig med et
result set og så sætte variablen ($billedid) ned i næste sqlsætning, men man
skal bruge funktionen mysql_insert_id() umiddelbart efter sin sql insert
statement og sætte sin variabel lig den og først derefter kan man bruge den
ned i næste sætning, så virker det.
mvh lars, senior newbie ;)
| |
Nis Jorgensen (12-09-2001)
| Kommentar Fra : Nis Jorgensen |
Dato : 12-09-01 08:11 |
|
On Tue, 11 Sep 2001 23:37:58 +0200, "Lars" <ledj@ Zprivat.dk> wrote:
>
>Nu har jeg løst problemet! Man kan ikke sætte en variabel i PHP lig med et
>result set og så sætte variablen ($billedid) ned i næste sqlsætning, men man
>skal bruge funktionen mysql_insert_id() umiddelbart efter sin sql insert
>statement og sætte sin variabel lig den og først derefter kan man bruge den
>ned i næste sætning, så virker det.
Altså ikke et databaseproblem, men et problem med dit værtssprog. Men
jeg forstår ikke hvorfor mit forslag med kun 2 kald til databasen ikke
virker (hvis du altså har prøvet det) Lettere tilrettet version, idet
jeg ikke kan huske om PHP accepterer linjeskift mellem "":
opret_forbindelse();
$opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
('$billedfil_name')";
sql_query($opret_produkt_db1);
$opret_produkt_db2 = "INSERT INTO produkter (navn, beskrivelse,
pris,gender, producentid, billedid) SELECT '$opretprodukt[0]',
'$opretprodukt[1]', '$opretprodukt[2]','$opretprodukt[3]',
$opretprodukt[3], id FROM billeder WHERE billednavn
='$billedfil_name'";
sql_query($opret_produkt_db2);
luk_forbindelse();
MVH
Nis
| |
Lars (12-09-2001)
| Kommentar Fra : Lars |
Dato : 12-09-01 08:54 |
|
> Altså ikke et databaseproblem, men et problem med dit værtssprog. Men
> jeg forstår ikke hvorfor mit forslag med kun 2 kald til databasen ikke
> virker (hvis du altså har prøvet det) Lettere tilrettet version, idet
> jeg ikke kan huske om PHP accepterer linjeskift mellem "":
Jeg forsøgte med din anden løsning, men det virkede ikke rigtig, jeg ved
ikke om MySQL kan tage en sqlsætning på den måde, hvor en select optræder
midt i en anden sætning...
mvh lars
>
> opret_forbindelse();
>
> $opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
> ('$billedfil_name')";
> sql_query($opret_produkt_db1);
>
> $opret_produkt_db2 = "INSERT INTO produkter (navn, beskrivelse,
> pris,gender, producentid, billedid) SELECT '$opretprodukt[0]',
> '$opretprodukt[1]', '$opretprodukt[2]','$opretprodukt[3]',
> $opretprodukt[3], id FROM billeder WHERE billednavn
> ='$billedfil_name'";
> sql_query($opret_produkt_db2);
>
> luk_forbindelse();
>
> MVH
>
> Nis
| |
Nis Jorgensen (12-09-2001)
| Kommentar Fra : Nis Jorgensen |
Dato : 12-09-01 09:15 |
|
On Wed, 12 Sep 2001 09:53:41 +0200, "Lars" <ledj@ Zprivat.dk> wrote:
>Jeg forsøgte med din anden løsning, men det virkede ikke rigtig, jeg ved
>ikke om MySQL kan tage en sqlsætning på den måde, hvor en select optræder
>midt i en anden sætning...
Ja, min første løsning går nok bedre i MySQL.
| |
|
|