使用PDO连接方法

时间:2014-01-08 12:32:12

标签: php mysql pdo mysqli

当我第一次开始学习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/>";
}

我知道需要在每个新函数中调用连接。我的问题是:

  1. 在每个函数的数据库连接中添加代码最少的方法是什么
  2. 我应该在哪里存储用户名和密码 - root php? .ini文件?
  3. 有没有'更好'的方式来做一个while循环而不是我一直在使用的...

1 个答案:

答案 0 :(得分:2)

在迁移到PDO(面向对象的库)时,尝试将项目移动到相同的编码方式 - 面向对象的范例。

您可以构建的简单架构是:

  • 进行PDO连接的类(即数据库)
  • 具有凭据的配置文件
  • 从与数据库交互的每个其他类扩展的类(即Base)。此类应包含数据库类的实例(即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
}