我尝试将PDO
用于SELECT
选项,这是我的functions.php
代码:
<?php
class Benefits
{
public function fetch_all()
{
global $pdo;
$benfitssql = $pdo->query('SELECT * FROM lkup_benefits');
//$benfitssql->execute();
while ($row = $benfitssql->fetch(PDO::FETCH_ASSOC))
{
$ops.= "<option value='" . $row['BenefitOption'] . "'>"
. $row['Benfits'] . "</option>";
}
}
}
?>
这是我的主页:
<label>Benefit Type</label>
<select class="select2_category form-control" data-placeholder="Choose a Category" tabindex="1" id="benefittype" name="benefittype">
<?php echo $ops; ?>
</select>
当我选择SELECT
选项时,它会打开而没有记录,为什么会这样,我错过了什么?
答案 0 :(得分:2)
您的代码存在两个基本缺陷
首先,你不应该在函数内部格式化HTML,
第二,你应该返回来自函数的东西
class Benefits {
public function fetch_all() {
global $pdo;
return $pdo->query('SELECT * FROM lkup_benefits') ->fetchAll();
}
}
?>
<label>Benefit Type</label>
<select class="select2_category form-control" data-placeholder="Choose a Category" tabindex="1" id="benefittype" name="benefittype">
<?php foreach ($benefits->fetch_all() as $row): ?>
<option value="<?=$row['BenefitOption']?>"><?=$row['Benfits']?></option>
<?php endforeach ?>
</select>
答案 1 :(得分:0)
添加你的常识的答案,他说的一切都是正确的,但他忘了(你忘了吧?)一个重要的细节: Globals are evil! < / p>
如果您的函数需要PDO对象才能工作,只需要它!
class Benefits {
public function fetch_all(PDO $pdo) { //Ask for what you need in the constructor!
return $pdo->query('SELECT * FROM lkup_benefits') ->fetchAll();
}
}
?>
<label>Benefit Type</label>
<select class="select2_category form-control" data-placeholder="Choose a Category" tabindex="1" id="benefittype" name="benefittype">
<?php foreach ($benefits->fetch_all($pdo) as $row): //Pass it in when you need it! ?>
<option value="<?=$row['BenefitOption']?>"><?=$row['Benfits']?></option>
<?php endforeach; ?>
</select>
这使得你的类变得更加灵活,你现在不会默默地依赖于这样一个事实:有一个名为$ pdo的全局对象并且是PDO类型的,代码将不起作用,而且它是现在很清楚!。
还有其他问题,例如将数据获取逻辑与表示逻辑混合在一起,但这超出了本问题的范围。