Vedere se record esiste

intimoviro

Utente Attivo
18 Ago 2009
272
0
0
Scusate ragazzi, forse sarà l'ora tarda, ma se eseguo questo codice

PHP:
$sql = "SELECT * FROM products_attributes WHERE products_id ='$pid' AND options_id = '1' AND options_values_id = '$prod'";
$rows = $db->query($sql);
  while ($r = $db->fetch_array($rows)){
      $p = $r[products_id];
}


if($p == FALSE){

$query = "INSERT INTO products_attributes (products_id, options_id,  options_values_id) VALUES ('$pid', '1', '$p_att')";
$insert = mysql_query($query);
   if(!$insert) die(mysql_error());
}

Cioè vuol dire che se nella tabella products_attributes, non esiste quel prodotto deve eseguire l'inserimento nel database!

Giusto?

Perchè non scrive niente nel database, ed invece se imposto l'if a TRUE mi scrive?

Non ci capisco più niente.

Un'aiutino?:crying:
 
Il problema credo dipenda da

Codice:
$p = $r[products_id];

Che non restituisce TRUE oppure FALSE: restituisce qualcosa se il record esiste oppure una stringa vuota o zero (non false) se il record non esiste.

Prova a sostituire

Codice:
if($p == FALSE){

con

Codice:
if(!$p){

Poi c'è un altro problema: invece di

Codice:
$rows = $db->query($sql);

Usa un più tradizionale

Codice:
$rows= mysql_query($sql);

e dovrebbe andare.

Potresti anche sostituire

Codice:
$sql = "SELECT * FROM products_attributes WHERE products_id ='$pid' AND options_id = '1' AND options_values_id = '$prod'";

con

Codice:
$sql = "SELECT products_id FROM products_attributes WHERE products_id ='$pid' AND options_id = '1' AND options_values_id = '$prod'";

Che consuma meno risorse mysql...
 
Ultima modifica:
potresti fare un semplice controllo con mysql_num_rows():
PHP:
if(mysql_num_rows($rows) == 0)
{
// effettua l'insert
}
 
ciao
oltre a quello che ha detto softhare, se come dovrebbe essere products_id è unico il while non serve.
poi eliox ti ha dato una soluzione a mio parere migliore

(battuto sul tempo)

dimenticavo, al posto di

//.............
$insert = mysql_query($query);
if(!$insert) die(mysql_error());
//..................

potresti più semplicemente

//............
$insert = mysql_query($query) OR die(mysql_error());
//............
 
Ultima modifica:
un piccolo consiglio, non usare il formato:
PHP:
$p = $r[products_id]
meglio
PHP:
$p = $r['products_id']
 
ciao
...l'usare direttamente la libreria mysql. Se ha un CMS che gli mette...
ti riferisci alla riga $rows = $db->query($sql); ?
se si (a precsindere che a me piaccono poco le classi) forse sarebbe meglio usare o tutto con la classe o tutto con la lib mysql, per quallo che capisco ogni tanto usa la classe (vedi sopra) e ogni tanto la ibreria
$insert = mysql_query($query);
a mio parere uno script dovrebbe essere coerente (o forse mi sbaglio)
 
Comunque non sono d'accordo con l'usare direttamente la libreria mysql. Se ha un CMS che gli mette a disposizione una classe per interagire con il database non capisco perché non debba essere sfruttata.

l'importante è che la classe metta a disposizione un metodo per il conteggio delle righe coinvolte, probabilmente ci deve essere qualcosa tipo:
PHP:
$db->num_rows($rows)
 

Discussioni simili