2012-01-04 5 views
5

Attualmente sto cercando di inserire dati in una tabella chiamata , questo tavolo atti "customer_quote" come una tabella di collegamento tra il "cliente" tavolo e le "customer_tariffs "Tabella. Registra inoltre l'utente che ha trasferito i dati tramite la tabella "utente".Impossibile inserire il valore di chiave esterna in collegamento tavolo

Ecco uno schema del mio db:

http://i.imgur.com/LOG1T.png enter image description here

e qui è uno screenshot della tabella che non mi permette di inserire in esso.

http://i.imgur.com/i2wiU.png

enter image description here

Questo è il processo nel modo in cui inserisco nel mio db:

  1. dati inserire in tabella dei clienti
  2. recuperare la riga id utilizzando mysql_insert_id
  3. Inserire i dati in customer_quote < --- Non funziona!

Ecco il codice:

//code above this inserted data into customer table 

//get id of row where data was just inserted 
$sustomer->cid = mysql_insert_id($db); 

//insert into customer_quote table 
$database->query("INSERT INTO customer_quote (cid) 
     Values ('$customer->cid')"); 

** Nuovo messaggio di errore **

'Cannot add or update a child row: a foreign key constraint fails (quote_system . customer_quote , CONSTRAINT fk_customer_quote_customer FOREIGN KEY (cid) REFERENCES customer (id) ON DELETE NO ACTION ON UPDATE NO ACTION)'

Come si può vedere che il feedback errore è inutile, quindi dopo circa tre ore di test I ho concluso che il problema è la mia colonna "cid" nella tabella "customer quote".

Accetta solo determinati valori, tuttavia la mia variabile php ha il valore corretto che è possibile inserire tramite phpmyadmin come si può vedere nello screenshot qui sotto.

http://i.imgur.com/eEFou.png

enter image description here

Quindi deve essere vincoli o altro in mio tavolo che mi sta fermando?

Qualche idea su come risolvere questo problema.

Grazie!

+0

Amare il post dettagliato .... spero solo che la mia risposta sia sbagliata ... perché avresti potuto risparmiare tutto questo aggiungendo un ')' ..... – ManseUK

+0

1. Non sembri stai usando la variabile cid che hai appena ricevuto? Ma invece il cliente-> cid? Immagino che questi si risolvano nella stessa cosa? 2. Non sono un esperto PHP ma non dovrebbe leggere il tuo codice: "INSERISCI I valori customer_quote (cid) ('$ customer-> cid')") - ti manca una parentesi – BeRecursive

+0

scusa che era un tipo, io mano digitò il codice invece di incollare-oops! – kaleeway

risposta

2

Spero davvero che il suo un semplice errore di battitura nella tua domanda, ma la query non è corretto:

$database->query("INSERT INTO customer_quote (cid) 
     Values ('$customer->cid'"); 

dovrebbe essere

$database->query("INSERT INTO customer_quote (cid) 
     Values ('$customer->cid')"); // added closing bracket on values 
+0

Grazie, ma ora ottengo questo errore: -'Non aggiungere o aggiornare una riga secondaria: un vincolo di chiave esterna non riesce ('quote_sistema' .customer_quote', CONSTRAINT' fk_customer_quote_customer' FOREIGN KEY ('cid') REFERENCES' cliente' ('id') ON DELETE NESSUNA AZIONE SU AGGIORNAMENTO NESSUNA AZIONE) 'i – kaleeway

+0

' uid' è richiesto anche? – ManseUK

+0

sì, quindi suppongo di dover inserire anche quello adesso. – kaleeway

2

avete smarrito il doppio preventivo e perse una parentesi

Modificare le linee:

$database->query("INSERT INTO customer_quote (cid) 
    Values ('$customer->cid'"); 

a

$database->query("INSERT INTO customer_quote (cid) 
    Values ('$customer->cid')"); 
+0

Grazie, ma ora ottengo questo errore: -'Non aggiungere o aggiornare una riga secondaria: un vincolo di chiave esterna non riesce ('quote_sistema' .customer_quote', CONSTRAINT' fk_customer_quote_customer' FOREIGN KEY ('cid') REFERENCES' cliente' ('id') ON DELETE NESSUNA AZIONE SU AGGIORNAMENTO NESSUNA AZIONE) 'i – kaleeway

+0

@loosebruce: il valore di' $ cliente-> cid' non esiste nella tabella clienti. – Toto

2

Hai un mancante) alla fine del vostro inserto ...

//insert into customer_quote table 
$database->query("INSERT INTO customer_quote (cid) Values ('$customer->cid'"); 

dovrebbe essere

//insert into customer_quote table 
$database->query("INSERT INTO customer_quote (cid) Values ('$customer->cid')"); 

BTW, bel post con le immagini, ecc ..

+0

Grazie, ma ora ho ricevuto questo errore: - 'Impossibile aggiungere o aggiornare una riga secondaria: un vincolo di chiave esterna non riesce ('quote_sistema' .customer_quote', CONSTRAINT' fk_customer_quote_customer' FOREIGN KEY ('cid') REFERENCES' cliente' ('id') ON DELETE NESSUNA AZIONE SU AGGIORNAMENTO NO AZIONE) 'i – kaleeway

+0

Bene dice che l'ID non è valido in base alla tabella dei clienti. Probabilmente la stessa cosa accadrà con la tabella del tuo utente causando l'inserimento di un NULL in una tabella non nulla. –

1

Ti manca una parentesi: