如果访问代码正确,我有一个直接返回用户数据的脚本。
$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。
如果找到 ANY 这些代码,我仍然可以检索用户数据。
我可以使用查询执行此操作,还是需要使用php?
此致 中号
答案 0 :(得分:2)
最好是规范化架构。制作一个访问代码表,其中userID
和access_code
的每个组合都有一行。然后,您可以在此表和JOIN
表之间使用users
来获取具有特定访问代码的用户。
如果无法重新设计,可以使用正则表达式:
$sql = "SELECT * FROM users WHERE access_code RLIKE CONCAT('[[:<:]]', ?, '[[:>:]]')";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $CODE);
$stmt->execute();
[[:<:]]
和[[:>:]]
匹配字边界,因此只有当代码是列中的整个字时才会匹配。
答案 1 :(得分:0)
$codes = "123456 654321 0101020304";
$expCodes = explode(" ", $codes);
$code = implode("', '", $expCodes);
$sql = "SELECT * FROM users WHERE access_codes IN ('{$code}') ";
// do your query