Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数据库中选择,其中somefield包含一个值_Php_Mysql_Sql_Mysqli - Fatal编程技术网

Php 从数据库中选择,其中somefield包含一个值

Php 从数据库中选择,其中somefield包含一个值,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我有一个直接的脚本,如果访问代码正确,它将返回用户数据 $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

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

$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_代码仅包含1个值,则它可以正常工作

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

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

我可以用query来实现这一点,还是需要用php来解决这个问题

问候
M

最好规范化模式。制作一个访问代码表,其中
userID
access\u code
的每个组合都有一行。然后,您可以在此表和
users
表之间使用
JOIN
,以获取具有特定访问代码的用户

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

$sql = "SELECT * FROM users WHERE access_code RLIKE CONCAT('[[:<:]]', ?, '[[:>:]]')";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $CODE);
$stmt->execute();
$sql=“SELECT*从用户那里访问”\u code RLIKE CONCAT(“[[::]]”);
$stmt=$mysqli->prepare($sql);
$stmt->bind_参数('s',$CODE);
$stmt->execute();

[[[::]]
匹配单词边界,因此只有当代码在列中是一个完整的单词时才会匹配。

您使用in代替=并将空格替换为commas@Mihai我想你把它倒过来了。数据库包含以空格分隔的数字,
$code
仅包含其中一个。例如,从(1,2,3)@Barmar中的某个列所在的表中选择*正确,我的解析有错误。请澄清问题。代码列表是在
$code
中还是在数据库列中?如果它在数据库中,那么最好规范化模式。
$codes = "123456 654321 0101020304";
$expCodes = explode(" ", $codes);

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

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