我有一个选择查询,然后是另一个选择查询但是另一个表。我需要运行第一个查询,然后如果找到了什么,则显示带有foreach循环的表。然后,运行第二个查询并选择另一个带有foreach循环的表。
这是我运行数据库的DB类:
class DB {
private static $_instance = null;
private $_pdo,
$_query,
$_error = false,
$_count = 0;
public $_results;
private function __construct() {
try {
$this->_pdo = new PDO(...);
} catch(PDOException $e) {
die($e->getMessage());
}
}
public static function getInstance() {
if(!isset(self::$_instance)) {
self::$_instance = new DB();
}
return self::$_instance;
}
public function query($sql, $params = array()) {
$this->_error = false;
if($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if(count($params)) {
foreach($params as $param) {
$this->_query->bindValue($x, $param);
$x++;
}
}
if($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
然后,在页面上我有以下内容:
<?php if ($st = DB::getInstance()->query("SELECT * FROM resum WHERE form_id = ? ORDER by date DESC", array(Input::get('formID')))) {
if ($st->count()) { ?>
<div id="topSeparateurClient">
<div>Date</div>
<div>Concessionnaire</div>
<div>Client</div>
<div>Voiture</div>
<div>Prix</div>
<div>Statut</div>
</div>
<div style="clear:both;"></div>
<?php
foreach($st->_results as $result) {
echo "<div class=\"clientGenInfos\">
<div><b>".substr($result->date, 0, 10)."</b> / ".substr($result->date, 10)."</div>
<div>".$result->concessionnaire."</div>
<div>".$result->client."</div>
<div>".$result->voiture."</div>
<div>".$result->prix."</div>";
if ($result->statut == 'En Attente') {
echo '<div class="enAttente"><span>En Attente</span></div>';
} else if ($result->statut == 'Accepter') {
echo '<div class="accepter"><span>Accepter</span></div>';
} else if ($result->statut == 'Refuser') {
echo '<div class="refuser"><span>Refuser</span></div>';
}
echo " </div>
";
}
} else {
echo '<div class="aucuneDemande">Nothing from now.</div>';
}
}
?>
然后是第二个块,几乎相同但在查询中有另一个表名。现在的问题是我的第二个表与第一个表具有相同的值。我被困在这里,在网上阅读的东西,没有关于这种情况。我还是PDO对象的新手!请帮忙!
编辑---
这是我的第二块......
<?php
if ($st = DB::getInstance()->query("SELECT * FROM users WHERE users.group = 3 ORDER by date DESC")) {
if ($st->count()) { ?>
<div id="topSeparateurClientConc">
<div>Prénom et Nom</div>
<div>Adresse</div>
<div>Nom d'utilisateur</div>
<div>Date d'inscription</div>
<div>Demandes reçues</div>
</div>
<div style="clear:both;"></div>
<?php
foreach($st->_results as $result2) {
echo "<div class=\"clientGenInfosConc\">
<div>".$result2->name."</div>
<div>".$result2->adresse."</div>
<div>".$result2->username."</div>
<div><b>".substr($result2->joined, 0, 10)."</b> / ".substr($result2->joined, 10)."</div>
<div>".$result2->concessionnaire."</div>
</div>";
}
} else {
echo '<div class="aucuneDemande">Aucune demande transférable en ce moment</div>';
}
}
?>
答案 0 :(得分:1)
PDO 已经一个包装器。由专业人士撰写。它有一些缺点,但至少它没有新手程序员引入数百个的有害功能。
如果你想要静态方法来获取实例 - 好吧,拥有它。但剩下的就是原始的PDO。 为自己保留一个函数调用并不值得与自己的包装器的谬误作斗争。
根本不保存电话!看看你在做什么:
<?php if ($st = DB::getInstance()->query("SELECT * FROM resum WHERE form_id = ? ORDER by date DESC", array(Input::get('formID'))))
如果不滚动,甚至无法读取。你是否因为每一条额外的线路或罚款而被罚款? 这一行包含了近十几个运营商!
你正在为自己节省一个换行速度以便写得更快,但是当它来到阅读时,你会在这里跑,哭泣&#34;为我读取我的代码!&#34; 。
特别是如果你谁必须维护。看:
<?php
$sql = "SELECT * FROM resum WHERE form_id = ? ORDER by date DESC";
$st = DB::getInstance()->query($sql, array(Input::get('formID')));
if ($st)
人们可以阅读并理解它。没有人因为将这个电话分成四行而死亡。现在添加几个:
$sql = "SELECT * FROM resum WHERE form_id = ? ORDER by date DESC";
$st = DB::getInstance()->prepare($sql);
$st->execute(array(Input::get('formID')));
$data = $st->fetchAll();
if ($data)
假设getInstance()返回原始PDO实例。而且你的代码将非常好用。
好吧,我能理解程序员避免重复的愿望。这是一个solution that solves this problem without drawbacks:
$sql = "SELECT * FROM resum WHERE form_id = ? ORDER by date DESC";
$data = DB::prepare($sql)->execute(array(Input::get('formID')))->fetchAll();
然后退出在模板中编写SQL调用的想法。首先获取所有数据,然后包含带有标记的文件。
<?php if ($data): ?>
<div id="topSeparateurClientConc">
<div>Prénom et Nom</div>
<div>Adresse</div>
<div>Nom d'utilisateur</div>
<div>Date d'inscription</div>
<div>Demandes reçues</div>
</div>
<div style="clear:both;"></div>
<?php foreach($data as $result2): ?>
<div class="clientGenInfosConc">