2016-05-08 24 views
1

ich für einige Benutzernamen in der Datenbank wie this->, wie mehrere Benutzernamen in einer einzigen Abfrage

$skip = $_POST['username']; 
$_SESSION['skip_user'] = array(); 
array_push($_SESSION['skip_user'],$skip); 
$str = $_SESSION['skip_user']; 
$string = rtrim(implode(',', $str), ','); 

Jetzt String-Variable sieht aus wie "name1, name2, name3" suchen möchten, suchen;

mysqli_query($db, "SELECT * FROM users WHERE username in ({$string}) ORDER BY id DESC"); 

Das holt die Benutzer, aber ich will diese Benutzer nicht. Ich meine, gibt es irgendeine Frage wo ich kann ich schreiben WHERE username !in ({$string})!

erhalten alle Benutzer mit Ausnahme von "name1, name2, name3" diese Benutzer

Jetzt nach NICHT IN Hinzufügen Ich erhalte Fehler

mysqli_query($db, "SELECT * FROM users WHERE username NOT IN ({$string}) ORDER BY id DESC")or die(mysqli_error($db)); php is giving error Unknown column 'name1' in 'where clause' 
+0

Sie suchen die WHERE NOT IN() '' Funktionalität – Peter

Antwort

2

Versuchen Sie NOT IN in der SQL-Abfrage.

Zuerst versuchen Sie, die Werte, die Sie versuchen, in dem NOT IN Teil der SQL-Abfrage Anführungszeichen hinzuzufügen.

$str = ''; 
foreach ($_SESSION['skip_user'] AS $word) { 
    $str .= "'$word',"; 
} 
$str = rtrim($str, ','); 

Dann ist dieses $str in Ihrer Abfrage verwenden. Versuchen Sie auch, eine Gewohnheit aus der Verwendung von `` für Spaltennamen zu machen, wie folgt aus:

SELECT `SOMETHING` FROM `TABLE_NAME` WHERE <CONDITION> 

Ich hoffe, das hilft!

+0

ich einen Fehler bin Empfang in der Abfrage. mysqli_query ($ db, "SELECT * FROM Benutzer WHERE Benutzername NOT IN ({$ string}) ORDER BY ID DESC") oder sterben (mysqli_error ($ db)); php gibt Fehler Unbekannte Spalte 'Name1' in 'Where-Klausel' –

+0

@SagarSingh - wegen der fehlenden Zitate, lesen Sie meine Antwort für die Lösung. –

+0

können Sie immer noch implodieren keinen Grund zu Schleife –

2

Sie sollten NOT IN verwenden, um bestimmte Werte auszuschließen.

mysqli_query($db, "SELECT * FROM users WHERE username NOT IN ('name1', 'name2') ORDER BY id DESC"); 
1

yep, einfach "nicht" anstelle von "!"

Wählen Sie * aus der Tabelle where munk nicht in ('item1', 'item2', 'item3');

1) Sie haben ein paar andere Probleme, obwohl Sie nicht Anführungszeichen Ihre implodieren und fügte hinzu:

// you need quotes here 
$string = implode("','", $str); 
// And here 
mysqli_query($db, "SELECT * FROM users WHERE username in ('{$string}') ORDER BY id DESC"); 

Dies ist jedoch, was Sie sollten wirklich tun.

2) Sie Ihre Parameter binden sollten stattdessen, wie Sie SQL-Injection geöffnet sind:

$params = array(); 
$params[0] = ""; 
$sql = "SELECT * FROM users WHERE username NOT IN ("; 
foreach($str as $s){ 
    $params[0] .= "s"; 
    array_push($params, $s); 
    $sql .= "?, "; 
} 
$sql = rtrim($sql, " ,").") ORDER BY id DESC"; 

$stmt = $conn->prepare($sql); 

// this is the same as doing: $stmt->bind_param('s', $param); 
call_user_func_array(array($stmt, 'bind_param'), $params); 

// execute and get results 
$stmt->execute(); 
Verwandte Themen