2016-07-30 7 views
1
$name=Yii::$app->request->post('name'); 
$address=Yii::$app->request->post('address'); 

if($name || $address) 
{ 
    $sql="SELECT * FROM studentrecords WHERE name=$name AND address=$address" ; 
    $display=Yii::$app->db->createCommand($sql)->queryAll(); 
} 

Was ich brauche, ist, wenn ich die Eingabeadresse im Adressfeld nicht ignorieren WHERE address=$address. Derzeit, wenn $address ist Null, gibt es SQL-Fehler.Ignorieren der Where-Bedingung wenn null

+0

Ihre Verwendung von OR in der if-Anweisung und dann UND in der Abfrage sollte Ihnen einen Hinweis geben. Logischerweise wäre es sinnvoll, diejenigen mit dem gleichen Operator zu machen, oder? Beachten Sie, dass php, behandelt 'False, null und 0 'als falsch – ArtisticPhoenix

Antwort

1

Hallo Sie können dies einfach tun. Verwende concatnation von $sql. Wenn $name und $address

$name=Yii::$app->request->post('name'); 
$address=Yii::$app->request->post('address'); 
$sql = "SELECT * FROM studentrecords where 1 = 1 ";   
if($name) 
{ 
    $sql.=" AND name='$name'" ; 

} 
if($address) { 
    $sql.= " AND address= '$address'"; 
    } 

$display=Yii::$app->db->createCommand($sql)->queryAll(); 
0

Kontrolle dieses ......

$name=Yii::$app->request->post('name'); 
    $address=Yii::$app->request->post('address'); 
    $conditions = array(); 
    $where = ''; 

    if ($name) { 
     $conditions[] = 'name= "'.$name.'"'; 
    } 
    if ($address) { 
     $conditions[] = 'address= "'.$address.'"'; 
    } 

    if(count($conditions)) { 
     $where = 'WHERE '.implode(' AND ', $conditions); 
    } 

    $sqlStatement = 'SELECT * FROM studentrecords '.$where; 
+1

Wenn kein Name und keine Adresse vorhanden sind, wird Abfrage fehlschlagen;). Mach etwas wie $ wo = ''; if (count ($ conditions)) {$ where = ....} Ich habe einige Änderungen vorgenommen – Eduardo

3

existieren Wenn Sie Active Sie können Sie andFilterWhere

  $query = StudentRecors::find() 
       ->andFilterWhere(['=', 'name', $name]) 
       ->andFilterWhere(['=', 'address', $address])->all(); 

andFilterWhere verwalten die in dem in Art und Weise Bedingung, dass der Teil, wo nur der Abfrage hinzugefügt wird, wenn der zugehörige Wert ist nicht null

+0

das ist informativ. aber aus bestimmten Gründen brauche ich Werte in Array. – micky

Verwandte Themen