Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 从从会话用户名派生的外键ID获取ID和行_Php_Sqlite - Fatal编程技术网

Php 从从会话用户名派生的外键ID获取ID和行

Php 从从会话用户名派生的外键ID获取ID和行,php,sqlite,Php,Sqlite,我试图获得一个ID和一个名为info的行,以显示用户名为基础 我有一个用户表: TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL 以及一个用户ID为FK的infos表: TABLE infos ( infoid INTEGE

我试图获得一个ID和一个名为info的行,以显示用户名为基础

我有一个用户表:

TABLE users (
id       INTEGER PRIMARY KEY AUTOINCREMENT
                 NOT NULL,
username TEXT    NOT NULL
                 UNIQUE,
password TEXT    NOT NULL
以及一个用户ID为FK的infos表:

TABLE infos (
infoid  INTEGER NOT NULL
                  PRIMARY KEY AUTOINCREMENT,
info    TEXT    NOT NULL,
productid INTEGER REFERENCES product (productid) 
                  NOT NULL,
userid    INTEGER REFERENCES users (id) 
                  NOT NULL
我已设法从会话中获取用户名和用户名:

// get username
$name = $_SESSION['username'];
$stmt = $db->prepare("SELECT id FROM users WHERE username = :name");
$stmt->execute(["name" => $name]);
$r = $stmt->fetch(); 

// get userid
$stmnt2 = $db->prepare("SELECT info FROM infos WHERE userid = :r");
$stmnt2->execute(["r" => $r['id']]);
我正在努力获取所有的信息id和基于用户id的信息。我已经设法获得了信息,但它错过了第一个条目,我无法获得信息ID

    // get info based on userid
    if ($info = $stmnt2->fetch()) {
        echo '<p>Your Info:</p>';   
            while ($info = $stmnt2->fetch()) {
            echo "$info[info] </br>";
            }
   } else {
        echo "<p>No Info</p>";
//根据用户ID获取信息
如果($info=$stmnt2->fetch()){
回显“您的信息:

”; 而($info=$stmnt2->fetch()){ 回显“$info[info]
”; } }否则{ 回声“无信息”

”;
有人能告诉我如何获得infoid和显示信息吗?谢谢。

替换

// get userid
$stmnt2 = $db->prepare("SELECT info FROM infos WHERE userid = :r");
$stmnt2->execute(["r" => $r['id']]);

替换

// get info based on userid
if ($info = $stmnt2->fetch()) {
    echo '<p>Your Info:</p>';   
        while ($info = $stmnt2->fetch()) {
        echo "$info[info] </br>";
        }
} else {
    echo "<p>No Info</p>";
}
//根据用户ID获取信息
如果($info=$stmnt2->fetch()){
回显“您的信息:

”; 而($info=$stmnt2->fetch()){ 回显“$info[info]
”; } }否则{ 回声“无信息”

”; }

//根据用户ID获取信息
如果($info=$stmnt2->fetch()){
回显“您的信息:

”; 做{ echo“$info[info]
”;//信息id包含在$info['id'中 }而($info=$stmnt2->fetch()); }否则{ 回声“无信息”

”; }

//根据用户ID获取信息
如果($stmnt2->num_rows()){
回显“您的信息:

”; 而($info=$stmnt2->fetch()){ echo“$info[info]
”;//信息id包含在$info['id'中 } }否则{ 回声“无信息”

”; }

我建议您使用第二种方法。请不要犹豫,向我询问任何解释。

谢谢,它正在工作。另外,我正在使用sqlite,因此num_rows将是fetch
->num_rows()
是查询返回的行数,但
->fetch()
提供查询中的行,不确定是否真的是行,但我不确定SQLLitenum_rows()对我不起作用,因为我使用PDO,并且当我使用rowCount(我认为是它的替代方法)时,我会得到输出“No Info”。因此,我坚持使用第一行,因为它可以工作OK,这也是我以两种方式发布的原因
// get info based on userid
if ($info = $stmnt2->fetch()) {
    echo '<p>Your Info:</p>';   
        while ($info = $stmnt2->fetch()) {
        echo "$info[info] </br>";
        }
} else {
    echo "<p>No Info</p>";
}
// get info based on userid

if ($info = $stmnt2->fetch()) {
    echo '<p>Your Info:</p>';   
    do {
        echo "$info[info] </br>"; //The info id is contained in the $info['id']
    } while ($info = $stmnt2->fetch());
} else {
    echo "<p>No Info</p>";
}
// get info based on userid

if ($stmnt2->num_rows()) {
    echo '<p>Your Info:</p>';   
    while ($info = $stmnt2->fetch()){
        echo "$info[info] </br>"; //The info id is contained in the $info['id']
    }
} else {
    echo "<p>No Info</p>";
}