我正在编写一个相当基本的代码来从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);