2016-04-16 5 views
0

Ich möchte in eine Datenbank über PDO einfügen, aber wenn einige Variablen nicht gesetzt sind, werde ich sie nicht offensichtlich in die Datenbank schreiben.(PHP) PDO verwenden unterschiedliche Querys abhängig von Set-Variablen

Beispiel:

$ name

$ Nachname eingestellt ist nicht

$query = $db->prepare("INSERT INTO customer SET name = ?"); 
$query->execute(array($name)); 

Beispiel 2:

$ name

$ Namen gesetzt ist gesetzt

$query = $db->prepare("INSERT INTO customer SET name = ?, surname = ?"); 
$query->execute(array($name, $surname)); 

Wie würde ich es mit nur einer Vorbereitung implementieren und ausführen? Oder was ist der intelligenteste Weg, es zu implementieren?

+0

eine Abfrage als Variable beim Aufbau vorzubereiten. –

+0

Verwenden Sie eine if-Bedingung und verwenden Sie je nach Auswertung der if-Bedingung eine dieser Abfragen. –

+1

Bitte lesen Sie das Handbuch für die "INSERT" -Syntax http://dev.mysql.com/doc/refman/5.7/en/insert.html Dann starten Sie wieder – RiggsFolly

Antwort

0

Sie können ein verwenden, wenn die Bedingung zu überprüfen, ob die Variablen Satz

if(isset($name)) 
{ 
if(isset($surname)) 
{ 
    $query = $db->prepare("INSERT INTO customer SET name = ?, surname = ?"); 
    $query->execute(array($name, $surname)); 

} 
else { 

    $query = $db->prepare("INSERT INTO customer SET name = ?"); 
$query->execute(array($name)); 
} 
} 

Edit: Sie diesen Code versuchen können, wenn Sie nur eine einzige Aussage

if(isset($name)) 
{ 
    $q="INSERT INTO customer SET name = ?"; 
    $arr=array($name); 
    if(isset($surname)) 
{ 
    $q="INSERT INTO customer SET name = ?, surname = ?"; 
    $arr[]=$surname; 

} 

} 

$query = $db->prepare($q); 
$query->execute($arr); 
+0

I Ich möchte nur schreiben bereiten Sie vor und führen Sie einmal aus. Kann ich das tun wie $ query = $ db-> prepare ($ sql); $ query-> execute (array ($ set_variables)); und setze $ sql und $ set_variables in den if isset-Bedingungen? – thotho

+0

Die Bearbeitung sieht fast wie die Lösung aus, die ich möchte. Ich werde es ausprobieren, danke! – thotho

0

Wenn ich Ihre Frage verstanden habe, möchten Sie den Wert des Nachnamens einfügen, auch wenn es nicht festgelegt ist.

$db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$dbh->quote($name).','.$dbh->quote($surname).')'); 

Der Code fügt den Wert ein, auch wenn er leer ist.

EDIT:

wenn Sie eine Antwort erhalten möchten, verwenden Sie diese:

if($db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$dbh->quote($name).','.$dbh->quote($surname).')')) { 
    echo 'Success'; 
} else { 
    echo 'fail'; 
} 

EDIT 2:

/* if name is not set, insert ONLY surname */ 
    if(!isset($name)) { 
     if($db->exec('INSERT INTO `customer`(`surname`) VALUES('.$db->quote('surname').')')){ 
      echo 'success'; 
     } else { 
      echo 'fail'; 
     } 
    /* if surname is not set, insert ONLY name */ 
    } elseif(!isset($surname)) { 
     if($db->exec('INSERT INTO `customer`(`name`) VALUES('.$db->quote('name').')')){ 
      echo 'success'; 
     } else { 
      echo 'fail'; 
     } 
    /* if both are set, insert both */ 
    } else { 
     if($db->exec('INSERT INTO `customer`(`name`,`surname`) VALUES('.$db->quote('name').','.$db->quote('surname').')')){ 
      echo 'success'; 
     } else { 
      echo 'fail'; 
     } 
    } 
+0

Ich möchte nur die gesetzten Werte einfügen, wenn der Name festgelegt ist, aber der Nachname ist nicht, nur Name festlegen. Wenn Name und Vorname ist gesetzt, füge beide ein Wenn Name nicht gesetzt ist, aber Nachname ist, setze nur Nachname – thotho

+0

@thotho - ok, ich habe meine Antwort aktualisiert, checkout> EDIT 2 –

+0

@thotho lassen Sie uns wissen, wenn Ihr Problem gelöst ist –

0

Sie können versuchen,

<?php 
if (isset($name)&&isset($surname)) { 
    $query = $db->prepare("INSERT INTO customer SET name = ? , surname = ?"); 
    $query->execute(array($name, $surname)); 
}else { 
    if (isset($name){ 
     $query = $db->prepare("INSERT INTO customer SET name = ? "); 
     $query->execute(array($name)); 
    }else{ 
     $query = $db->prepare("INSERT INTO customer SET surname = ? "); 
     $query->execute(array($surname)); 
    } 
} 


?>