【问题标题】:mysqli query returning metadata instead of fieldsmysqli 查询返回元数据而不是字段
【发布时间】:2017-05-07 00:22:51
【问题描述】:

这个 mysqli 查询返回给定列的元数据,而不是列中的数据:

$query = mysqli_query($conn, "SELECT id FROM users WHERE pword = '$codeword'");

//Start user session
if ($query) {
    session_start();
    $_SESSION['login'] = true;
    $_SESSION['codeword'] = $codeword;
    $row = mysqli_fetch_assoc($query);
    $id = $row['id'];
    $_SESSION['id'] = $id;

// Send user to launchpad
    header("Location: menu.php");
    exit;
} else {
    echo "Error!";
}

当我这样做时 IE:

var_dump($_SESSION['id']);

它返回这个:

        object(stdClass)#1 (13) {
  ["name"]=>
  string(2) "id"
  ["orgname"]=>
  string(2) "id"
  ["table"]=>
  string(5) "users"
  ["orgtable"]=>
  string(5) "users"
  ["def"]=>
  string(0) ""
  ["db"]=>
  string(4) "game"
  ["catalog"]=>
  string(3) "def"
  ["max_length"]=>
  int(1)
  ["length"]=>
  int(50)
  ["charsetnr"]=>
  int(63)
  ["flags"]=>
  int(32768)
  ["type"]=>
  int(3)
  ["decimals"]=>
  int(0)
}

任何帮助将不胜感激。啊,它告诉我添加文本,所以我们开始吧。

编辑:在我将代码更改为

之后仍然做同样的事情
while($row = mysqli_fetch_assoc($query)) {
    $id = $row['id'];
}
$_SESSION['id'] = $id;

编辑#2:我正在尝试从“游戏”数据库中的“id”字段中获取文本值。我在我的其他 register.php 文件中有代码,它可以做到这一点,它看起来像这样:

$query1 = mysqli_query($conn, "SELECT id FROM users WHERE id = (SELECT MAX(id) FROM users);");
$column = mysqli_fetch_assoc($query1);
$id = $column["id"];
$id = $id + 1;

但是当我尝试同样的事情时,这个文件略有不同:

$query = mysqli_query($conn, "SELECT * FROM users WHERE pword = '$codeword'");
$row = mysqli_fetch_assoc($query);
$id = $row["id"];
$_SESSION['id'] = $id;

并尝试以文本形式访问它:

echo $_SESSION['id'];

它给了我错误'Catchable fatal error: Object of class stdClass could not be convert to string in /opt/lampp/htdocs/Game/index.php on line 12'

【问题讨论】:

  • $codeword 一个字符串吗?
  • 是的。但如果我把它放在引号里,它会做同样的事情 fyi
  • 只是忘了在我的帖子中把它放回引号中,brb
  • 你别无选择只能用引号括起来。这样做,再次运行代码,然后在你的问题中写下那个错误是什么
  • 您没有从查询中获取任何内容,这就是原因。

标签: php sql session mysqli


【解决方案1】:

编辑:得到它的工作!不知道是否有人会回来,但这是有效的:

$query = mysqli_query($conn, "SELECT * FROM users WHERE pword = '$codeword'");
$row = mysqli_fetch_assoc($query);
$_SESSION['id'] = $row['id'];

【讨论】:

    【解决方案2】:

    当然,“mysqli_query”不会返回类似的内容

    您发布的代码都不会有这样的结果。这意味着您的 $_SESSION['id'] 变量在其他地方被覆盖。

    在任何重定向之前,您可以通过 原地 var_dump'ing 返回的 id 来测试它。

    【讨论】:

    • 一个 var_dump($id) 什么都不返回。
    • 另外@Fred -ii- 你说我没有获取任何东西,但我获取了一个关联数组,然后从其中(或尝试)获取了“id”字段。我这样做不正确吗?
    【解决方案3】:

    当我这样做时: var_dump($_SESSION['id']); 它返回:

    • 这是正常的。

    如果你想回显那些,你需要从你的查询中循环。

    使用各种循环,例如while($row)foreach

    阅读文档:

    这假设您已连接到相同的 API,即 mysqli_ 而不是其他任何 API。

    即:

    while($row=mysqli_fetch_assoc($query)){...}

    并检查查询中的错误:

    通过 php:

    【讨论】:

    • @Nienaber 不客气。如果我再也没有收到您的来信,那么您可以将问题标记为已解决lol
    • @Nienaber,不要只是说谢谢就跑了……如果对你有帮助,请接受它。
    • dv'er,愿意分享你的智慧吗?
    • 我当然会尽快接受,谢谢你的烤肉。
    • @Nienaber 我不希望你因为错误的原因接受答案。我需要知道真正的问题/问题是什么。我刚刚在上面发表了评论。
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2023-03-31
    • 2012-11-02
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多