使用foreach循环数据库

时间:2015-06-29 09:49:42

标签: php postgresql foreach

我想用“foreach”浏览postgre数据库中的数据。所以我提出了这样的要求:

    $conn_string = "host=localhost port=5432 dbname=test_postgre user=postgres password='1234'";
    $dbconn = pg_connect($conn_string);

    $sql = "SELECT id_traitement FROM public.traitement WHERE id_essai='.$id_essai.';";
    $res = pg_query($sql) or die("Pb avec la requete: $sql");

    $data = pg_fetch_all($res);

我用“pg_fetch_all”获得我的价值观。

之后,我正在寻找比较我的数据库中的数据(获取请求)和我的网页中的数据。所以我创建了这个循环:

foreach($array as $ligne_web)
    {
        foreach($data['id_traitement'] as $ligne_base)
        {
            if(($ligne_web[0] == $ligne_base) and ($flag))
            {

                //update de la ligne
                update_traitement($id_traitement,$traitement,$code_traitement,$id_essai);
                $flag2 = false;
                break 1;


            }

        }
        if(($flag) and ($flag2))
        {
            insert_traitement($id_traitement,$traitement,$code_traitement,$id_essai);
        }
    }

当我尝试运行它时,firebug告诉我:为foreach()提供的参数无效。所以我不知道如何浏览数据库中的行。当然我的问题出在我的foreach,但我没有发现什么是错的。 求救!

2 个答案:

答案 0 :(得分:0)

您的第二个foreach似乎需要' $data'而不是$data['id_traitement']

所以你的代码需要改为,

foreach($arr as $ligne_web)

    {
        foreach($data as $ligne_base) // <-- Here is the correction 

        {
            if(($ligne_web[0] == $ligne_base) and ($flag))

            {

                 ------ REST of your Codes ------

答案 1 :(得分:0)

好的,我找到了答案。而不是来自我的数据库的数组$ data,而是在请求之后,我创建了一个新数组。 这是我的代码:

    $conn_string = "host=localhost port=5432 dbname=test_postgre user=postgres password='1234'";
    $dbconn = pg_connect($conn_string);

    $sql = "SELECT id_traitement FROM public.traitement WHERE id_essai='.$id_essai.';";
    $res = pg_query($sql) or die("Pb avec la requete: $sql");

    $tableau_database_final = array();
    while ($data = pg_fetch_all($res)) //Here is my array 
    {
        $tableau_database = array('id_traitement'=>$data['id_traitement']);
        array_push($tableau_database_final,$tableau_database);
    }

    $flag2 = true;

    foreach($array as $ligne_web)
    {
        foreach($tableau_database_final as $ligne_base)
        {
            echo ($ligne_web[0]);
            echo ($ligne_base);


            if(($ligne_web[0] == $ligne_base)) //Si il existe une ligne ayant déjà le même id traitement
            {

                //update de la ligne
                update_traitement($id_traitement,$traitement,$code_traitement,$id_essai);
                $flag2 = false;
                break 1;


            }

        }
        if(($flag) && ($flag2))
        {
            //insert_traitement($id_traitement,$traitement,$code_traitement,$id_essai);
        }
    }