我很新的PHP面向对象编程,以便在想,如果我能我创建了一个数据库对象上得到一些好的建议。PDO和PHP的OOP代码意见
我打电话给db并将我的类包含到每个页面加载中,并启动数据库对象using $db = new db
。然后,我根据自己想要做的事情,针对每个可能需要的操作(从数据库构建菜单,获取登录信息等)调用此方法。
它需要它的第一个参数作为与查询?符号作为我想要绑定的值的替换,第二个参数是在数组中将值绑定到它的值,然后再通过prepared_statement方法循环,第三个参数是类型(FETCH_ARRAY返回SELECT语句行的数组, NUM_ROWS返回受影响的行数,INSERT返回最后插入的ID)。
的我怎么会调用这个函数下面是一个例子:
$db->prepared_execute("SELECT * FROM whatever WHERE ? = ? ", array('password', 'letmein'), NUM_ROWS);
第二个和第三个参数是可选的,如果没有被绑定的参数或无需返回。
由于我是新来OOP,我发现很难让我的头周围什么时候正确地使用,什么是公共的,私人的,静态函数/变量和设计模式(辛格尔顿等)。
我已经阅读了很多教程,只要我有,但我觉得现在我需要在这里获得进一步的答案或建议下一步与OOP和我已经建成的类。
它的工作原理,因为它是这对我来说是除了任何错误处理,我将在明年增加一个很好的起点,但我要确保我不会在这里做任何明显的设计错误。
该类的代码如下:
class db {
var $pdo;
public function __construct() {
$this->pdo = new PDO('mysql:dbname=' . DB_NAME . ';host=' . DB_HOST . ';charset=utf8', DB_USER, DB_PASS);
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function prepared_execute($query, $bind_values = null, $type = null) {
$preparedStatement = $this->pdo->prepare($query);
if($bind_values) {
$i = 1;
foreach($bind_values as $bind_value) {
$preparedStatement->bindValue($i, $bind_value);
$i++;
} }
$preparedStatement->execute();
if( $type == FETCH_ARRAY) { return $preparedStatement->fetchAll(); }
elseif($type == NUM_ROWS) { return $preparedStatement->rowCount(); }
elseif($type == INSERT ) { return $this->pdo->lastInsertId(); }
else{ return true; }
}
非常感谢你的回应!我会花时间仔细阅读这些内容,并检查您发布的链接,如果我有任何问题,请告诉我们,但非常感谢您的反馈意见,这正是我一直在寻找的内容。 – 2013-03-23 01:31:11