当我第一次开始学习php时,我理解将数据库连接文件存储在我的根文件夹中是一种很好的做法,并将其包含在每个文件的顶部。这些设置将在整个文件中传输并在函数内部工作等 - 因此相同的文件是存储全局变量的好地方。
现在我终于更新我的代码/处理一个新项目,我知道mysql函数已经折旧了,我应该使用PDO或MySQLi。我读到的东西表明,使用Mysqli的旧样式循环更难,所以我认为PDO可能是一个更好的起点。
//例。
while($val = mysql_fetch_array($query)){
$propertyid = $val['propertyid'];
$regularid = $val['regularid'];
$oldamount = str_replace(",", "", $val['amount']);
$datedue = $val['billdate'];
}
所以我认为最好从PDO开始。如果我在它之前包含$ dbh连接线,则下面的方法有效。但是,当我将$ dbh连接线移动到我的安装文件时,它不会。
$query = $dbh->prepare("SELECT username FROM users");
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
print "hi ";
print $row['username']."<br/>";
}
我知道需要在每个新函数中调用连接。我的问题是:
答案 0 :(得分:2)
在迁移到PDO(面向对象的库)时,尝试将项目移动到相同的编码方式 - 面向对象的范例。
您可以构建的简单架构是:
protected $_db
,在构造函数$this->_db = new Database()
中)extends Base
)现在都可以$this->_db->prepare(....)
因此,最重要的是你的连接是一个通过数据库交互类共享的对象。
关于循环。您几乎无法使用while()
作为方法返回值。事实上你会,但这是一种矫枉过正。
您的方法应该返回获取的结果:
public function getUsers() {
$query = $this->_db->prepare("SELECT username FROM users");
$query->execute();
return $query->fetch(PDO::FETCH_ASSOC);
}
或(这不是必要的):
while ($row = $query->fetch(PDO::FETCH_ASSOC) {
$users[] = $row;
}
return $users;
这样你的getUsers()
方法会将结果集作为关联数组返回,PHP中用于处理数组的最佳内置函数是foreach()
,所以你需要迭代方法返回值:
foreach ($obj->getUser() as $row) {
// do smth
}