PDO 从数据库中获取多条记录

PDO fetch multiple records from database

我正在编写一段非常基本的代码来从 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 中试过了,它 return 是正确的值。

现在我想像这样在我的 HTML 中使用这个功能...

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

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

我认为这可能与 fetchAll 命令有关。我也尝试了 PDO::Fetch_ASSOC 但那也不起作用。

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

而不是 echo ($result); 在您的函数中执行 return $result;

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

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

或者将函数 return 分配给一个变量并对其进行循环:

$rows = getschema($mysqli);

事情是这样的;你在混合 MySQL APIs/functions 而那些不混合。

? 占位符

替换 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

用 AbraCadaver 的回答中概述的循环替换 fetchAll 的行。

  • 你不能混合 MySQL APIs/function,请阅读 Stack 上的以下内容:
  • Can I mix MySQL APIs in PHP?

阅读带有准备好的语句的 mysqli 及其工作原理:

检查错误会列出错误。