php pdo框架,重新启程:php底层框架篇(PDO)

一直在使用框架,如今脱离了框架居然发现自己不会写程序了,这两天一直在做一个程序安全方面的应用,程序很老旧,代码质量很糟糕,我决定重新去构建这套系统,但是使用自己得框架

第一篇PDO数据库底层操作篇

private $db;

private $trans_ing = false;

private $db_err;

public function __construct()

{

$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';port=' . DB_PORT;

for ($i = 0; $i < 3; $i++) {

try {

$this->db = new PDO($dsn, DB_USER, DB_PASS, array(

PDO::ATTR_PERSISTENT => false,

PDO::ATTR_CASE => PDO::CASE_NATURAL,

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

PDO::ATTR_AUTOCOMMIT => true,

PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',

));

break;

} catch (Exception $e) {

if ($i >= 2) throw new Exception('连接数据库失败,请重试');

}

}

}

public function getError()

{

return $this->db_err;

}

//插入

public function insert($table, $data)

{

$fields = '';

$values = '';

$realValues = array();

foreach ($data as $k => $v) {

if ($v === null) {

continue;

}

$fields .= '`' . $k . '`,';

$values .= ":{$k},";

$realValues[":{$k}"] = strval($v);

}

$sql = 'INSERT INTO `' . $table . '` (' . substr($fields, 0, -1) . ') VALUES (' . substr($values, 0, -1) . ')';

$pre = $this->db->prepare($sql);

if (!$pre) {

return false;

}

$result = $pre->execute($realValues);

if ($result) {

return $this->db->lastInsertId();

}

return false;

}

//更新

public function update($table, $data, $where = array())

{

$fields = '';

$realValues = array();

foreach ($data as $k => $v) {

if ($v === null) {

continue;

}

$fields .= ",`{$k}`=:{$k}";

$realValues[":{$k}"] = strval($v);

}

$fields = substr($fields, 1, strlen($fields) - 1);

$whereSql = '';

$whereValues = array();

foreach ($where as $k => $v) {

$whereSql .= " AND `{$k}`=:{$k}_1";

$whereValues[":{$k}_1"] = strval($v);

}

$realValues = array_merge($whereValues, $realValues);

$sql = "UPDATE `{$table}` SET {$fields} WHERE 1 {$whereSql}";

$pre = $this->db->prepare($sql);

if (!$pre) {

return false;

}

try {

$ret = $pre->execute($realValues);

return $ret;

} catch (Exception $e) {

$this->db_err = $e->getMessage();

return false;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自主封装的PHP ORM框架,面向对象的PDO数据库操作,API框架,支持Get/Post/Put/Delete多种请求方式。 代码示例: <?php use Models\User; require '../application.php'; require '../loader-api.php'; //适合查询,如:获取用户列表或者单个用户信息 execute_request(HttpRequestMethod::Get, function() { $action = request_action(); //判断是否存在 if ($action == 1) { list($type, $value) = filter_request(array( request_int('type', 1, 2, 3), //1.用户名 2.邮箱 3.手机号 request_string('value'))); $type_field_map = array( 1 => User::$field_username, 2 => User::$field_email, 3 => User::$field_phone ); if ($type == 2 && !is_email($value) || $type == 3 && !is_mobilephone($value)) { die_error(USER_ERROR, $type_field_map[$type]['name'] . '格式无效'); } $user = new User(); $user->set_where_and($type_field_map[$type], SqlOperator::Equals, $value); $result = $user->exists(create_pdo()); echo_result($result ? 1 : 0); //存在返回1,不存在返回0 } //查询单条信息 if ($action == 2) { list($userid) = filter_request(array( request_userid())); //查询单条数据 $user = new User($userid); //set_query_fields可以指定查询字段,下面两种写法均可 //$user->set_query_fields('userid, username, email'); //$user->set_query_fields(array(User::$field_userid, User::$field_username, User::$field_email)); //还可设置where条件进行查询 //$user->set_where_and(User::$field_status, SqlOperator::Equals, 3); //$user->set_where_and(User::$field_truename, SqlOperator::IsNullOrEmpty); //$user->set_where_and(User::$field_age, SqlOperator::In, array(27, 29)); //$user->set_where_and(User::$field_regtime, SqlOperator::LessThan, '-6 month'); //创建数据库连接 $db = create_pdo(); $result = $user->load($db, $user); //也可以用Model类的静态方法 //$result = Model::load_model($db, $user, $user); if (!$result[0]) die_error(PDO_ERROR_CODE, '获取用户信息时数据库错误'); if (!$user) di

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值