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中尝试了它,它返回正确的值。

现在我想在我的HTML中使用这个函数,像这样…

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

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

我想可能是fetchAll命令的问题。我也尝试了PDO::Fetch_ASSOC,但也没有工作。

另外,即使在php.ini文件中启用了php错误,我也看不到php错误。

是这样的;你把MySQL的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回答中概述的循环。

  • 你不能混合MySQL api/函数,阅读下面的Stack:
  • 我可以在PHP中混合MySQL api吗?

阅读mysqli与预处理语句和它是如何工作的:

  • http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

检查错误会列出错误。

  • http://php.net/manual/en/mysqli.error.php
  • http://php.net/manual/en/function.error-reporting.php

在你的函数中用return $result;代替echo ($result);

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

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

或者将函数return赋值给一个变量,然后遍历该变量:

$rows = getschema($mysqli);