【问题标题】:(fixed myself) fetch data in database and store in a global variable(自己修复)在数据库中获取数据并存储在全局变量中
【发布时间】:2012-10-26 05:41:44
【问题描述】:

我整晚都在努力解决这个问题,但我似乎无法弄清楚。我是 php 和 PDO 的新手。我成功地创建了一个包含idfirstnamelastname 字段的数据库。

id =1 上,用户名和姓氏的值为AndreaBocelli
id=2 上是SarahBrightman

现在我想获取 id1 上的所有名字和姓氏并将其存储在 $_SESSION 数组变量中,并将 id2 的名字和姓氏值存储在另一个 $_SESSION 数组变量中,以便我能够在其他页面。这是我的代码:(已经编辑和工作)

$host   = "localhost";

$dbname = "try";

$user   = "root";

$pass   = "";

$dbh = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);

$statement = $dbh->prepare('SELECT * FROM members');

$statement->execute();

$count = $statement->rowCount();

$_SESSION['firstname']=array();

$_SESSION['lastname']=array();

for ($c=0, $c2=1;$c<$count;$c++, $c2++){

    $sql='SELECT firstname FROM members WHERE id=?';

    $sth=$dbh->prepare($sql);

    $sth->execute(array($c2));

    $_SESSION['firstname'][$c]=$sth->fetchColumn();

    $sql='SELECT lastname FROM members WHERE id=?';

    $sth=$dbh->prepare($sql);

    $sth->execute(array($c2));

    $_SESSION['lastname'][$c]=$sth->fetchColumn();

}

现在的问题是这段代码只获取 id1 上的数据,显然我只在循环内访问了 id 1。我想要做的是每个循环都会增加 id 号。我尝试在循环外部和循环内部声明一个变量$idupdate,然后在WHERE id=$idupdate&amp;idupdate++ 部分的循环内部,但它似乎不起作用。我想要实现的是获取 id 1 中整个列中的所有数据,并将其存储在另一个页面上可访问的数组变量中。我怎样才能做到这一点?任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql database pdo


    【解决方案1】:

    你需要调用 session_start();在设置/访问任何会话变量之前。 然后你可以通过首先调用 session_Start() 再次访问另一个页面中的会话变量;

    完成后,调用 session_destroy();

    【讨论】:

    • 我已经这样做了,在所有代码之上是 session_start(),但没有任何改变。
    【解决方案2】:

    您不必将会话声明为数组。 试试这样的。

    $_SESSION['id1']['firstname']=$firstname_id1; //
    $_SESSION['id1']['lastname']=$lastname_id1;
    
    $_SESSION['id2']['firstname']=$firstname_id2;
    $_SESSION['id2']['lastname']=$lastname_id2;
    

    您所做的将覆盖名字和姓氏。

    $_SESSION['firstname'][$c]=$sth->fetchColumn();
    

    我发现你的 for 循环没有多大意义。像这样的东西怎么样。

        <?php
    
    session_start();
    $host   = "localhost";
    
    $dbname = "try";
    
    $user   = "root";
    
    $pass   = "";
    
    $dbh = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
    
    $sql='SELECT firstname,lastname FROM members WHERE id=1';
    
    $sth=$dbh->prepare($sql);
    
    $sth->execute();
    
    $_SESSION[]['firstname']=$sth->fetchColumn();
    $_SESSION[]['lastname']=$sth->fetchColumn(1);
    
    $sql='SELECT firstname,lastname FROM members WHERE id=2';
    
    $sth=$dbh->prepare($sql);
    
    $sth->execute();
    
    $_SESSION[]['firstname']=$sth->fetchColumn();
    $_SESSION[]['lastname']=$sth->fetchColumn(1);
    
    
    ?>
    

    编辑:

    在插入行时存储名字和姓氏。

    <?php
    
         session_start();
     $firstname = 'Mike';
     $lastname = 'Luther';
    
    // query
    $sql = "INSERT INTO members (firstname,lastname) VALUES (:firstname,:lastname)";
    $q = $conn->prepare($sql);
    $q->execute(array(':firstname'=>$firstname,
                      ':lastname'=>$lastname));
    
    $id = $db->lastInsertId('id');
    
    $_SESSION[$id]['firstname'] = $firstname;
    $_SESSION[$id]['lastname'] = $lastname;
    
        //i dont think you will need that $id variable. What i understand is that you just want to display the firstname and lastname.
    
       //you can just write
    
       $_SESSION['firstname'] = $firstname;
       $_SESSION['lastname'] = $lastname;
    
    
    ?>
    

    【讨论】:

    • 是的,我试过了,但我想要实现的是每当我添加新的 id、用户名和姓氏时,自动在会话数组中创建另一个索引。我的网站类似于显示成员的详细信息,当添加新成员时,新的个人资料详细信息也将可见。
    • 我还是没明白你的具体要求。我很抱歉。
    • 对不起,我正在使用循环来获取行数意味着我正在获取 id 的数量,然后将名字和姓氏存储在数组变量中,现在当我添加一个新的id 示例 id 为 3,名字和姓氏中有新值,循环将再次运行并将新数据存储在数组变量中,因此每当我在我的站点中自动添加新成员时,名字和姓氏都将可见。
    • 我明白了。那么为什么不使用在添加 id 时设置会话有效,当你插入记录时。这将使您免于运行查询。我将编辑代码并编写代码或您。 2 分钟。
    • 请考虑勾选答案,如果它帮助/解决了您的问题。
    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多