【问题标题】:PDO fetch multiple records from databasePDO 从数据库中获取多条记录
【发布时间】:2015-07-30 21:25:30
【问题描述】:

我正在编写一段非常基本的代码来从 mysql 数据库中获取一个或(在大多数情况下)多行。

function getschema($mysqli){
    $id = $_SESSION['user_id'];
    $query = $mysqli->prepare("SELECT a.naam
                            FROM schemes AS a, aankoop AS b
                            WHERE b.aankoop_username_id = :userid && b.aankoop_schema_id = a.id");
    $query->bind_param(':userid', $id, PDO::PARAM_INT);
    $query->execute();
    $result = $query->fetchAll();
    echo ($result);
}

我从会话中获取用户 ID,并在准备好的语句中使用查询提取数据。 这个说法是正确的。我在 phpmyadmin 中尝试过,它返回了正确的值。

现在我想在我的 HTML 中使用这个函数......

<?php echo getschema($mysqli); ?>

但是我的代码没有返回任何东西,它甚至弄乱了我想要显示代码的 html 页面的布局。

我认为这可能与 fetchAll 命令有关。我也试过PDO::Fetch_ASSOC,但也没有用。

此外,我看不到 php 错误,即使它们在 php.ini 文件中启用。

【问题讨论】:

  • @AbraCadaver 为什么您将其发布为评论而不是答案?
  • @AbraCadaver,你的意思是把它作为一个值分配给一个文本区域还是你的意思是别的?我知道这将是一个数组,所以我必须在我的 html 页面中循环遍历它?
  • 非常仔细地看你的代码;什么不属于一起?检查错误会告诉你。另外,您首先使用哪个 API 进行连接?另外,您在自定义函数中运行它。
  • 我们也不知道会话是否开始
  • @Fred-ii-,会话已经开始,我可以在测试页面上回显它的内容。此外,我正在使用 mysqli api 与数据库连接,我终于能够打印出错误,我得到的是当我在测试页面上调用函数时调用未定义函数 getschema():foreach( getschema($mysqli) as $row) { echo $row['naam'];}。我还对查询做了一个小改动:&& 变成了 AND,我猜这在执行中并不重要。

标签: php mysql pdo fetch


【解决方案1】:

这就是发生的事情;您正在混合 MySQL API/函数,而这些 API/函数不会混合。

b.aankoop_username_id = :userid 中的:userid (PDO) 绑定替换为? 占位符

b.aankoop_username_id = ?

然后这一行:

$query->bind_param(':userid', $id, PDO::PARAM_INT); 

:userid 替换为$id 并删除, PDO::PARAM_INT 但添加i

$query->bind_param("i", $id);

旁注:确保该列是int 类型。如果没有,请使用s 而不是i

fetchAll 的行替换为 AbraCadaver 答案中概述的循环。

阅读 mysqli 和准备好的语句以及它是如何工作的:

检查错误将概述错误。

【讨论】:

  • 谢谢,我终于可以从我的数组中进行 var 转储了。感谢您的帮助!
【解决方案2】:

在你的函数中使用return $result; 而不是echo ($result);

然后要使用它,您必须遍历行数组并回显您想要的列:

foreach(getschema($mysqli) as $row) {
    echo $row['naam'];
}

或者将函数返回分配给一个变量并循环:

$rows = getschema($mysqli);

【讨论】:

  • 我正在尝试使用您提供的 foreach 解决方案。但由于某种原因,我的布局就这样被毁了。我把这个输出放在一个javascript选项卡中,但是当我把代码放进去时我不能再打开它了。
  • 当我创建一个新的 php 文件并包含所有必要的配置文件时。我使用您提供的代码调用了 getschema 函数,但我无法在屏幕上获得任何输出行。你知道这是什么原因吗?我认为我的 pdo 声明是正确的,但我不确定。
  • OP 的代码有问题,看起来有点像rum & coke。看看他们在做什么?他们使用了错误的成分;-)
  • @Fred-ii-:我会被诅咒的。
  • @AbraCadaver 是的。我之前偶然发现了这个问题,并认为你可能不在身边,所以我想我会在你的问题上加上一个补充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2011-05-29
  • 2013-06-14
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多