1

早上好,

我需要将数据库的所有行与数组进行比较,例如:

D B

VALUE 1 - VALUE 2 - VALUE 3
1         2         3

我尝试什么(PHP)

$hostname = 'localhost';
$username = 'root';
$password = '';
$database = 'namedb';
$db = new MySQLi($hostname, $username, $password, $database);
$sql=$db->query("SELECT * from numbers");



$all =array('1' => '6',
             '2' =>'32',
             '3' => '50'

);


while($res=$sql->fetch_array()){
$value1=$res['value1'];
$value2=$res['value2'];
$value3=$res['value3'];

$arraydb=array('1' => $value1,
              '2' =>$value2,
              '3' => $value3,

);

}
if ($all != $arraydb){
print_r($all);  

}else{
    echo 'exist in db';

}

我从 DB 中取出所有值并放入数组中,然后将其与 1 个静态数组进行比较。问题是,如果我把代码放在while中比较数据库中的值,它总是会写信给我,直到找到一个相同的。相反,我希望通过比较所有的值,如果甚至只有一个写我“存在于数据库中”,而不是如果比较它们发现什么都没有写给我数字


编辑:@Luuk(如果比较它们发现什么都没有给我写数字,不清楚你指的是哪个数字)我需要将所有 DB 行与单个数组进行比较

@Dilek 我不能使用WHERE id IN (1,2,3,4),因为我在 DB(value1-value2-value3) 中有 3 个标签,例如 1 - 2 - 3 并且我的数组有 (3-2-1) 所以如果我比较两个数组不匹配. 如果值不匹配,我需要比较所有行 db 仅打印一次单个数组,否则“存在于 db 中”

@Slepic(如果您不想打印数字,请删除 print_r 行。无论如何,您的代码有更大的问题......)只有当所有数据库与单个数组不匹配时,我才需要打印该值(代码不会上传在线所以不用担心数据库安全)

@mitkosoft$arraydb包含数据库中的值,例如我的示例:

$arraydb=array('1' => '1',
              '2' => '2',
              '3' => '3',
);
4

1 回答 1

0

我独自找到我的解决方案,为社区发帖:

$hostname = 'localhost';
$username = 'root';
$password = '';
$database = 'namedb';
$db = new MySQLi($hostname, $username, $password, $database);
$sql = $db->query("SELECT * from numbers");

$all = array(
    '1' => '6',
    '2' => '32',
    '3' => '50'

);

while ($res = $sql->fetch_array()) {
    $value1 = $res['value1'];
    $value2 = $res['value2'];
    $value3 = $res['value3'];

    $arraydb = array(
        '1' => $value1,
        '2' => $value2,
        '3' => $value3,

    );
    $result = array_diff($all, $arraydb);
    $count = $sql->num_rows;
    for ($i = 0; $i < $count; $i++) {
        if (empty($result)) {
            echo 'exist in db';
            exit;
        } else {
            $doesntmatch = '1';
            $i++;
        }
    }
}
if ($doesntmatch = '1') {
    print_r($all);
}

所以现在如果$all数组和$arraydb函数为空array_diff(所有值都匹配),FOR 将退出并 echo 'exist in db' else 将打印$all

于 2020-02-02T09:18:25.447 回答