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