簡體   English   中英

SQL - 選擇用戶名 WHERE role = $string

[英]SQL - Select username WHERE role = $string

我有一個存儲用戶及其角色的表。 用戶可以擁有 1 個或多個角色。 角色以字符串形式存儲,其中值由空格后的逗號分隔。

//Get selected roles from user input on a string where values are separated by , and space   

$roles = roleA, roleB; //  --> user selected input        
$query = "SELECT username FROM users WHERE role IN" .$roles;
$query = "SELECT username FROM users WHERE FIND_IN_SET(role, '$roles');

完整代碼如下:

<?php
include('dbConnect.php');

$roles = array_map('trim', explode(',',$_POST['role']));
$roles_tests = array_map(function($role) use ($link) {
        $role = $link->real_escape_string($role);
        return "FIND_IN_SET('$role', role)";
    }, $roles);
$query = "SELECT username FROM users WHERE " . implode(' OR ',           $roles_tests);
$results = mysqli_query($link, $query);

if (mysqli_num_rows($results) > 0) {
    echo '<option value="">Please choose</option>';
    while($row = mysqli_fetch_array($results))
    {
        var_dump(mysqli_num_rows($results)); 
        var_dump($row['username']);
        echo '<option value="'.$row['username'].'">'.$row['username'].'</option>';
    }
}else{
    echo '<option value="">Empty</option>'; //display when no data!
}
?>

無功轉儲結果:

var_dump(mysqli_num_rows($results));  --> 1   
var_dump($row['username']);  --> user1  

即使你說 num_rows = 1 仍然在 for 循環中,它也會將其設為 0 並且下拉列表為空。 如果我嘗試手動將條件放在WHERE ,它可以正常工作。

您需要將輸入分為多個角色。 然后,您需要使用FIND_IN_SET()role列進行測試。

您還需要在逗號后刪除空格,然后再調用FIND_IN_SET() ,因為它會按字面意義對待它們。

因此查詢應為:

$roles = array_map('trim', explode(',', $_POST['role']));
$roles_tests = array_map(function($role) use ($db) {
    $role = $db->real_escape_string($role);
    return "FIND_IN_SET('$role', REPLACE(role, ', ', ','))";
}, $roles);
$query = "SELECT username FROM users WHERE " . implode(' OR ', $roles_tests);

$db替換$db用於保存mysqli數據庫連接對象的實際變量。

您必須使用:

$query = "SELECT username FROM users WHERE role IN (" .$roles. ")";

注意IN和“之間以及()括號之間的空格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM