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 及其工作原理:
检查错误会列出错误。
我正在编写一段非常基本的代码来从 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 及其工作原理:
检查错误会列出错误。