我想了解如何在我的简单网页应用中的不同页面上调用函数的结果。我对php / pdo很新。
大多数时候我只想创建一个简单的SELECT
函数并在另一个页面上显示数据。
我有一个包含我所有名为class.crud.php
的函数的页面,内容如下(为显示目的而缩小);
class.crud.php
class crud {
private $db;
function __construct($DB_con) {
$this->db = $DB_con;
}
public function testing() {
$stmt = $this->db->prepare("SELECT * FROM users WHERE user_id=:userId");
$stmt->bindparam(":userId", $_SESSION['user_session']);
$stmt->execute();
$results = $stmt->fetch(PDO::FETCH_ASSOC);
//var_dump($results); this dumps the results successfully on the desired page
if ($stmt->rowCount() > 0) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print($row['user_id']);
print($row['user_name']);
echo $row['user_id'];
echo $row['user_name'];
}
} else {
echo 'nothing here';
}
return true;
}
}
如何在任何其他页面上显示此testing()
功能的结果?我尝试过以下但它没有工作(根本没有数据显示,但如果我取消注释var_dump($results)
我可以看到显示的数据数组);
用户-details.php
<div>
<p>User Details</p>
<?php $crud->testing();?>
</div>
几个问题;
echo
或print
个变量 - 如何在其他页面上访问此数据?return true
还是return
?我的数据库连接很好,我有很多功能可以使用。然而,它们是我一直用于测试的非常简单的功能。
理解逻辑时,任何帮助都是值得赞赏的。我读了很多教程:/
答案 0 :(得分:2)
实现此目的的最佳方法是将数据保存到数组中并在函数中返回:
$returnResults = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$returnResults[] = $row;
}
return $returnResults;
在模板文件中,您可以调用您的函数,并迭代结果:
<?php
$testing = $crud->testing();
foreach($testing as $row) {
// Echo your data here, in whatever way it best fits your template goals
echo $row['user_id'];
echo $row['user_name'];
}
?>
正如您所发现的,函数几乎不会直接打印或回显任何内容,因为它会使数据无法访问。此外,模板应始终控制数据在页面上的显示方式。这称为关注分离:
在MVC结构中,模型(您的crud类)应与您的数据库通信以创建,读取,更新或删除数据。它不应该关心如何或何时显示数据。
另一方面,您的视图(在这种情况下是您的模板文件)不应该关注与数据库交谈。它应该向您的模型询问数据,并且只担心相应地显示它。
如果你想进入更多的MVC结构,从技术上讲,你的控制器层应该在模型和视图之间来回传递数据。这意味着从模板中删除$ crud-&gt; testing()调用,并在首先从模型中获取数据的中间文件中调用它,然后呈现视图,向其传递需要呈现的数据。这可能比你的代码在这一点上要复杂得多,但如果你想进一步研究最好的MVC实践和关注点分离,这是值得理解的。
答案 1 :(得分:2)
这背后的原因是你只能 URL GOTO=https://navigator.web.de/?sid=8266e33e4a68f4dc2245fcc7e22063633d603457ed697b8c7aa7cf77306e5e1462f3096157b0b1bc031b669d19bc9df1&tz=1#mail
FRAME NAME="mail"
TAG POS=1 TYPE=BUTTON FORM=ID:id89 ATTR=ID:id8a
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:ide3 ATTR=ID:ide7 CONTENT=Testinput
TAG POS=1 TYPE=BUTTON FORM=ID:ide3 ATTR=ID:ide4
只能产生一次结果,除非用可滚动光标构建你的fetch
对象。
当返回所有行时(在你的情况下,我的结果集仅由一行组成,因为你有PDOStatement
作为键和唯一字段),函数user_id
返回false 。因此,在fetch
循环中,while
会fetch
。
或者您使用false
数组,如硬质合金所建议的,或者您需要在第二次调用fetch之前再次调用$result
函数,或者使用可滚动游标来回移动。您可以在PHP文档中使用PDOStatement::fetch。
如果你想在数组中得到所有结果,你也可以使用函数PDOStatement::fetchAll。
execute
所以它使你的整个功能如下:
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);