Passaggio di un ID ad una query di inserimento

  • Creatore Discussione Creatore Discussione adfadf
  • Data di inizio Data di inizio

adfadf

Utente Attivo
18 Apr 2009
83
0
0
Salve ho fatto 2 query, nella prima prelevo l'id, nella successiva vorrei inserire l'id stesso in una colonna, qui mi dà l'errore,

Incorrect integer value: '' for column 'codcategoria' at row 1

Sapreste dimri il perchè? Grazie.

//estraggo l'id dalla tabella ed è tutto ok
$estrazione_codice_sottocategoria="SELECT id FROM sottocategorie WHERE sottocategoria='$_POST[sottocategoria]'";
$codice_sottocat_estratto = mysql_query($estrazione_codice_sottocategoria)or
die(mysql_error());
while ($row= mysql_fetch_array($codice_sottocat_estratto)) {
echo $row['id'];
}
//qui arriva l'errore.
$inserimento_caratteristica="INSERT INTO caratteristiche (caratteristica, codcategoria) VALUES('$_POST[caratteristica]','$row[id]')";
 
La variabile $inserimento_caratteristica è fuori dal ciclo while e di conseguenza la variabile $row per lui non esiste.
Infati nel messaggio di errore il valore di $row['id'] è empty ('').
 
Scusate se rompo ancora in merito, ma ho provato ad inserire 2 codici id prelevati da 2 tabelle differenti in una altra tabella, la query insert into l'ho messa nel While come detto in precedenza, ma su uno dei 2 id che prelevo mi da ancora lo stesso errore, praticamente dice che è vuoto, il primo in particolare, il secondo invece c'è(nel senso riseco a prelevarlo)!!Come potrei fare?


PHP:
$estrazione_codice_sottocategoria="SELECT id FROM sottocategorie 
WHERE sottocategoria='$_POST[sottocategoria]'";
$codice_sottocat_estratto = mysql_query($estrazione_codice_sottocategoria)or die(mysql_error());
$estrazione_codice_categoria="SELECT id FROM categorie WHERE categoria='$_POST[categoria]'"; 
$codice_cat_estratto = mysql_query($estrazione_codice_categoria);
while ($row= mysql_fetch_array($codice_sottocat_estratto) & $row2= mysql_fetch_array($codice_cat_estratto)) 
{
$row['id'];
$row2['id'];
$inserimento_caratteristica="INSERT INTO caratteristiche 
(caratteristica, codcategoria, codsottocategoria) 
VALUES('$_POST[caratteristica]','$row2[id]','$row[id]')";
$grande_categoria_inserita = mysql_query($inserimento_caratteristica) or die(mysql_error());
}
 
Così è impossibile ottenere il risultato che vuoi.
Il modo più semplice che mi viene in mente, anche se un pò più laborioso, è quello di separare di due cicli while e inserire gli id in array separati e poi con un altro ciclo effettuare l'inserimento nel database.
PHP:
$estrazione_codice_sottocategoria="SELECT id FROM sottocategorie 
WHERE sottocategoria='$_POST[sottocategoria]'";
$codice_sottocat_estratto = mysql_query($estrazione_codice_sottocategoria)or die(mysql_error());
while ($row= mysql_fetch_array($codice_sottocat_estratto)) {
  $array[] = $row['id'];
}
$estrazione_codice_categoria="SELECT id FROM categorie WHERE categoria='$_POST[categoria]'"; 
$codice_cat_estratto = mysql_query($estrazione_codice_categoria);
while ($row= mysql_fetch_array($codice_cat_estratto)) {
  $array2[] = $row['id'];
}
for ($i = 0; $i < count($array); $i++) {
  $inserimento_caratteristica="INSERT INTO caratteristiche 
(caratteristica, codcategoria, codsottocategoria) 
VALUES('$_POST[caratteristica]','" . $array[$i] . "','" . $array2[id] . "')";
$grande_categoria_inserita = mysql_query($inserimento_caratteristica) or die(mysql_error());

}
Ovviamente la dimensione degli array deve essere identica... altrimenti non funziona...
L'altra opzione, che è più complessa è utilizzare le JOIN ma è necessario conoscere bene la struttura del database.
 
Vorrei optare per la seconda opzione: ho le 2 tabelle:
categorie: id, categorie,codgrandecategoria;
sottocategorie: id, sottocategorie, codcategoria;
lego le 2 tabelle attraverso la chiave di categorie(id) e la colonna codcategoria di sottocategorie.

PHP:
$estraz_codici="SELECT id,codcategoria FROM categorie INNER JOIN 
sottocategorie categorie['id']=sottocategorie['codcategorie'] 
WHERE sottocategoria='$_POST[sottocategoria]'";
$codice_estratto=mysql_query($estraz_codici);
while ($row= mysql_fetch_array($codice_estratto))
..

mi da errore, credo che ci sia un errore di sintassi, inoltre essendoci 2 coloone id a me interressa selezionare solo id della tabella sottocategorie, come dovrei fare?
 
Ok grazie, ma non capisco perchè ora mi dà l'errore su
while ($row=mysql_fetch_array($codice_estratto));
mi dice:
mysql_fetch_array(): supplied argument is not a valid MySQL result

PHP:
$estraz_codici="SELECT id,codcategoria FROM categorie INNER JOIN 
sottocategorie ON categorie.id=sottocategorie.codcategorie 
WHERE sottocategoria='$_POST[sottocategoria]'";
$codice_estratto=mysql_query($estraz_codici);
while ($row=mysql_fetch_array($codice_estratto))
{
$row['id'];
$row['codsottocategoria'];
 
C'è sicuramente un errore nella query, per trovarlo fai così:
PHP:
$codice_estratto=mysql_query($estraz_codici) or die (mysq_error());

pova questa sintassi:

PHP:
$estraz_codici="SELECT id,codcategoria FROM categorie INNER JOIN 
sottocategorie ON categorie.id=sottocategorie.codcategorie 
WHERE sottocategoria=".$_POST['sottocategoria'];
 
ecco lerrore: Column 'id' in field list is ambiguous
Questo deriva dal fatto che ci sono due colonne di nome id (dopo il Join) e lui non sa qual darmi, io vorrei prendere l'id delle sottocategorie, quindi dovrei scrivere:????
PHP:
"SELECT sottocategorie.id,codcategoria FROM 
categorie INNER JOIN sottocategorie ON 
categorie.id=sottocategorie.codcategorie 
WHERE sottocategoria=$_POST[sottocategoria]";
eliox ho utilizzato anche la tua sitassi, ma produce lo stesso risulato
 
Ultima modifica:
La sua sintassi è la stessa che ti ho segnalato io.
Ma a parte questo, quel messaggio significa che in entrambi i database hai la colonna "id" quindi deve selezionare quale vuoi.
Es: SELECT categorie.id id, campo2, campo3, ecc
 

Discussioni simili