2016-06-20 4 views
1

Das habe ich ausprobiert ... Ich verwende eine select-Anweisung, um die ID abzurufen die übergeordnete Tabelle, in der die E-Mail der E-Mail entspricht, die vom Benutzer angegeben wurde. Nach dem Abrufen der ID aus der übergeordneten Tabelle möchte ich diese ID auf das Feld parent_id in der untergeordneten Tabelle auf einen Feldwert in einer untergeordneten Tabelle setzen.Mit PHP wie ich einen bestimmten Feldwert aus einer Datenbanktabelle abrufen und dann diesen einzelnen Feldwert in eine neue Tabelle eingeben

Zum Beispiel hat meine Elterntabelle ID, Vorname, Nachname, Adresse, Telefon, E-Mail, Bildgenehmigung und Datum. Dann hat das Kind Tabelle id, child_first_name, child_last_name und parent_id

// already connected to database successfully 
    { 
     try 
     { 
      $sql = 'INSERT INTO parents SET 
      first_name = :fname, 
      last_name = :lname, 
      address = :address, 
      phone = :phone, 
      email = :email, 
      picture_approval = :picture, 
      date = NOW()'; 

      $s = $pdo->prepare($sql); 
      $s->bindValue(':fname', $_POST['g_first_name']); 
      $s->bindValue(':lname', $_POST['g_last_name']); 
      $s->bindValue(':address', $_POST['address']); 
      $s->bindValue(':phone', $_POST['phone']); 
      $s->bindValue(':email', $_POST['email']); 
      $s->bindValue(':picture', $_POST['pictures']); 
      $s->execute(); 
     } 
     catch (PDOException $e) 
     { 
      $errors[] = 'Error adding parent to database.'; 
     } 
    } 
//the above code works perfectly 

Aber dann diesen nächsten Teil funktioniert nie.

try 
    { 
     $sql = "SELECT id FROM parents WHERE email = :email"; 
     $s = $pdo->prepare($sql); 
     $s->bindValue(':email', $_POST['email']); 
     $s->execute(); 
     $s->bind_result($returned_id); 

     $s->fetch(); 

     $fieldValue = "$returned_id"; 


    } 
    catch (PDOException $e) 
    { 
     $errors[] = 'Error retrieving parent.'; 
    } 

Dann will ich meine INSERT INTO Kind Anweisung einrichten ... aber nicht wirklich sicher, wie seit meiner SELECT-Anweisung nicht richtig zu funktionieren scheint. Ich fand diese PHP function to extract a field value from a database aber es gibt nur den Wert aus, ich brauche es, um es in eine andere Tabelle zu setzen.

+0

Wenn der Code sequentiell ausgeführt wird, würde ich 'PDO :: lastInsertID' verwenden. http://php.net/manual/en/pdo.lastinsertid.php – bassxzero

+0

Also verwenden Sie PDO oder mysqli? Weil ['bind_result'] (http://php.net/manual/en/mysqli-stmt.bind-result.php) eine mysqli-Funktion ist, keine PDO-Funktion. –

+1

* Ändern Sie Ihren Code in Ihrer Frage nicht drastisch. Dies ändert die gesamte Frage und macht bereits gegebene Antworten ungültig. Sie können auf Ihrem Beitrag aufbauen, indem Sie eine Änderung mit den neuen Änderungen neben dem bereits vorhandenen hinzufügen. Wenn Sie eine andere Frage haben, erstellen Sie bitte einen neuen Beitrag. – Siyual

Antwort

1
$fieldValue = $returned_id; 

$ returned_id sollte nicht

+0

Ich habe versucht, die Zitate wegzunehmen und es hat immer noch nichts für mich getan. –

+0

Ich habe es funktioniert. Jetzt habe ich nur Probleme mit der INSERT-Anweisung für die Childs-Tabelle –

2

Statt manuell suchen die ID in Anführungszeichen gesetzt werden, verwenden lastInsertId().

$s->execute(); 
$returned_id = $pdo->lastInsertId(); 

Dann können Sie es verwenden, wie Sie es brauchen.

+0

Leider muss ich manuell suchen. Wenn ein Elternteil zwei weitere untergeordnete Elemente hinzufügt, möchte ich sicherstellen, dass die ursprüngliche übergeordnete ID auf das zweite untergeordnete Element gesetzt wird ... nicht ein anderes übergeordnetes Element, das der Datenbank ihren Namen hinzufügt (das wäre die zuletzt eingefügte ID –

+0

) Code kam zu diesem gehören $ _SERVER ['DOCUMENT_ROOT']. '/includes/db.inc.php '; ** $ sql = "SELECT ID FROM Eltern WHERE email =: email"; $ s = $ pdo-> vorbereiten ($ sql); $ s-> bindValue (': email', $ _POST ['email']); $ s-> execute(); $ zurückgegebene_id = $ pdo-> lastInsertId(); $ error = $ returned_id; enthalten $ _SERVER ['DOCUMENT_ROOT']. '/includes/error.html.php'; Ausgang(); ** –

+0

Ich bin froh, dass es funktioniert hat! – aynber

0

Eine gute Möglichkeit, dies zu tun, ist Ihre eigene Funktion zu erstellen.

function getParentID($conn, $email) 
     { 
      $sql = "SELECT id FROM parents WHERE email='$email' LIMIT 1"; 
      foreach ($conn->query($sql) as $row) 
       { 
        $parentIDinside = $row['id']; 
       } 
      return $parentIDinside; 
     } 

Dann rufen Sie die Funktion. Sie übergeben die Datenbankverbindung und die E-Mail-Adresse und die Funktion findet die ParentID, die mit dieser E-Mail-Adresse übereinstimmt. Diese Funktion kann für alles modifiziert werden.

include 'includes/db.inc.php'; //my database connection that creates a new $pdo connection 

     $parentID = getParentID($pdo, $_POST['email']); 

Nun ist die Variable $ parentID speichert die tatsächliche parentID aus der Datenbank mit der E-Mail zur Verfügung gestellt wurde und Sie können es in einer INSERT-Anweisung verwenden oder sonst wo Sie möchten.