使用php从多个数据库和多个表中检查数据

时间:2018-03-31 17:37:16

标签: php mysql

我正在尝试创建一个代码来检查来自具有相似表的多个数据库中的数据。所以我创建了一个数据库和表格数组,我想检查数据是否存在,如下所示

$DatabaseDetails=array(
    array('DatabaseName'=>'database1','TableName'=>'table1'),
    array('DatabaseName'=>'database2','TableName'=>'table2'),
    array('DatabaseName'=>'database3','TableName'=>'table3')
);

然后我尝试了一些代码,如果它没有找到第一个数据库中的数据,它会移动到第二个数据库,依此类推,直到找到其他数据"在数据库中没有打印数据" 但我没有得到预期的结果。我是php新手,所以没什么好主意的。所以任何帮助都非常感谢,并提前感谢您。我的代码如下。

<?php

class FindData{
    public $DatabaseDetails=array(
        array('DatabaseName'=>'database1','TableName'=>'table1'),
        array('DatabaseName'=>'database2','TableName'=>'table2'),
        array('DatabaseName'=>'database3','TableName'=>'table3')
    );

    public function SqlData(){
        $i=0;
        $count=count($this->DatabaseDetails);
        $email="ileee@example.com";
        $con=mysqli_connect('localhost','root','',$this->DatabaseDetails[$i]['DatabaseName']);
        $sql="select * from ".$this->DatabaseDetails[$i]['TableName']." where email='".$email."'"
        ;
        $run=$this->Data(mysqli_query($con,$sql));
        if(strpos($run,'No data')!==false){
            $i+=1;
        }else{
            echo $run;
        }
    }

    public function Data($run){
        if($run){
            $num=mysqli_num_rows($run);
            if($num>=1){
                return "Data is in presented"; 
            }else{
                return "No data";
            }
        }
    }

}
$obj=new FindData();
$obj->SqlData(); 

&GT;

2 个答案:

答案 0 :(得分:1)

您没有循环数据库

public function SqlData(){
    $i=0;
    $count=count($this->DatabaseDetails);
    $email="ileee@example.com";
    $con=mysqli_connect('localhost','root','',$this->DatabaseDetails[$i]['DatabaseName']);
    $sql="select * from ".$this->DatabaseDetails[$i]['TableName']." where email='".$email."'"
    ;
    $run=$this->Data(mysqli_query($con,$sql));
    if(strpos($run,'No data')!==false){
        $i+=1;
    }else{
        echo $run;
    }
}

即使您在外部多次调用此函数,也不会更改$i值。所以你只使用$i=0数据库。

您尝试在此处更新

if(strpos($run,'No data')!==false){
    $i+=1;
}

但是因为方法中没有循环,所以它是本地值。在每次调用方法时,都没有完成迭代或$i的值重置为0。正如我所说,不清楚该方法是被调用一次还是多次以提供迭代。无论哪种情况都没关系。

所以有3种方法可以解决这个问题。

  • 在方法
  • 中添加一个循环
  • 传递$i的值作为参数(多个外部调用)
  • 传递$i的值作为参数(递归调用)

有道理。

答案 1 :(得分:0)

我解决了这个问题。谢谢,大家,感谢所有的帮助和建议。以下是我的代码:

<?php
class FindData{
    public $DatabaseDetails=array(
        array('DatabaseName'=>'database1','TableName'=>'table1'),
        array('DatabaseName'=>'database2','TableName'=>'table2'),
        array('DatabaseName'=>'database3','TableName'=>'table3')
    );

    public function SqlData(){      
        $email="patelbhai16@gmail.com";
        $count=count($this->DatabaseDetails);
        $i=0;
        foreach($this->DatabaseDetails as $key =>$value){
            $con=mysqli_connect('localhost','root','',$value['DatabaseName']);
            if($con){
                $sql="select * from ".$value['TableName']." where email='".$email."'";
                $run=$this->Data(mysqli_query($con,$sql));
                if(strpos($run,'No data')!==false){
                    $i++;
                    if($i==$count){
                        if(strpos($run,'No data')!==false){
                            echo "No data";
                        }
                    }
                }else{
                    echo $run;
                    break;
                }
            }
        }       

    }

    public function Data($run){
        if($run){
            $num=mysqli_num_rows($run);
            if($num>=1){
                return "Data is in presented"; 
            }else{
                return "No data";
            }
        }
    }

}
$obj=new FindData();
$obj->SqlData(); 
?>

它可能在将来帮助某人。