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

时间:2015-07-30 21:25:31

标签: php mysql pdo fetch

我正在编写一段非常基本的代码来从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错误。

2 个答案:

答案 0 :(得分:1)

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

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

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

或者将函数return赋值给变量并循环遍历:

$rows = getschema($mysqli);

答案 1 :(得分:1)

这里发生了什么;您正在混合使用MySQL API /函数,而不是混合使用它们。

:userid中的b.aankoop_username_id = :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的行。

使用预先准备的语句阅读mysqli及其工作原理:

检查错误会勾勒出错误。