繁体   English   中英

从数据库WHERE somefield中选择包含以下值之一

[英]Selecting from database WHERE somefield contains one of the value

我有一个简单的脚本,如果访问代码正确,它将返回用户数据。

$sql = "SELECT * FROM users WHERE access_codes = '$CODE' ";
$rs = $mysqli->query($sql);
$rows = mysqli_num_rows($rs);
if ($rows == 1) {
    //CODE IS FOUND, RETURN USERNAME AND PASSWORD
    $row = mysqli_fetch_array($rs);
    $username = $row['username'];
    $password = $row['password'];
    mysqli_close($mysqli); // Closing Connection
    header("Location: http://GOTONEXTPAGE.COM");
    die();

} else {
    //CODE IS NOT FOUND
    mysqli_close($mysqli); // Closing Connection
    exit;
}

如果access_codes仅包含1个值,则可以正常工作。

但是我想实现的是access_codes可以包含多个代码,以空格隔开:例如123456 654321 0101020304。

如果找到这些代码中的任何一个 ,我仍然可以检索用户数据。

我可以使用查询来做到这一点,还是需要使用php来解决?

问候M

最好规范化架构。 制作一张访问代码表,其中userIDaccess_code每种组合都有一行。 然后,您可以在此表和users表之间使用JOIN来为用户提供特定的访问代码。

如果无法重新设计,则可以使用正则表达式:

$sql = "SELECT * FROM users WHERE access_code RLIKE CONCAT('[[:<:]]', ?, '[[:>:]]')";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $CODE);
$stmt->execute();

[[:<:]][[:>:]]匹配单词边界,因此仅当代码是该列中的整个单词时才匹配。

$codes = "123456 654321 0101020304";
$expCodes = explode(" ", $codes);

$code = implode("', '", $expCodes);

$sql = "SELECT * FROM users WHERE access_codes IN ('{$code}') ";
// do your query

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM