PDO数据库操作类——插入数据的实现

[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/77/ ]

mPHP核心框架使用PDO数据库抽象层往数据表中更新或插入数据,都是通过PDO的exec()方法,如果你熟悉Mysql数据库的sql语句,那么理解起来就更轻松了,你可以把它当作mysql的query()来使用,而且exec()执行完毕还会返回影响的数据行总数.

mPHP核心框架使用PDO数据库抽象层往数据表中更新或插入数据,都是通过PDO的exec()方法,如果你熟悉Mysql数据库的sql语句,那么理解起来就更轻松了,你可以把它当作mysql的query()来使用,而且exec()执行完毕还会返回影响的数据行总数。

例如存在表mo2g_test

id
name

往mo2g_test中插入数据 id = 1 ,name = PDO,那么mysql的使用方法如下

$strSql = "insert into mo2g_test (id,name) values (1,'PDO')";
mysql_query($strSql);
$reslut = mysql_affected_rows();//返回影响了多少行数据

PDO的exec()更简单

$strSql = "insert into mo2g_test (id,name) values (1,'PDO')";
$reslut = $pdo->exec($strSql);//返回影响了多少行数据

其实插入数据的sql都有固定的格式:

1)插入单条数据

insert into 数据表 (字段1,字段2) values (数值1,数值2)

2)插入多条数据

insert into 数据表 (字段1,字段2) values (数值1,数值2),(数值3,数值4),(数值n,数值n+1)

所以,我根据这一特征封装了PDO类的insert方法

function insert($table,$arrData) {}

1)$table为数据表的名称

2)$arrData为要插入的数据

使用方法如下:

1)一次插入一条数据:数据库抽象层

$arrData = array('id'=>1,'name'=>'PDO');
$pdo->insert('mo2g_test',$arrData);

2)一次插入多条数据:

$arrData = array(
    array('id'=>1,'name'=>'PDO'),
    array('id'=>2,'name'=>'mPHP')
);
$this->insert('mo2g_test',$arrData);

insert函数的实现代码如下

public function insert($table,$arrData) {
    $name = $values = '';
    $flag = $flagV = 1;
    $true = is_array( current($arrData) );//判断是否一次插入多条数据
    if($true) {
        //构建插入多条数据的sql语句
        foreach($arrData as $arr) {
            $values .= $flag ? '(' : ',(';
            foreach($arr as $key => $value) {
                if($flagV) {
                    if($flag) $name .= "$key";
                    $values .= "'$value'";
                    $flagV = 0;
                } else {
                    if($flag) $name .= ",$key";
                    $values .= ",'$value'";
                }
            }
            $values .= ') ';
            $flag = 0;
            $flagV = 1;
        }
    } else {
        //构建插入单条数据的sql语句
        foreach($arrData as $key => $value) {
            if($flagV) {
                $name = "$key";
                $values = "('$value'";
                $flagV = 0;
            } else {
                $name .= ",$key";
                $values .= ",'$value'";
            }
        }
        $values .= ") ";
    }
    
    $this->sql = $strSql = "insert into $table ($name) values $values";
    if( ($this->result = $this->db->exec($strSql) ) > 0 ) {
        return $this;
    }
    return false;
}

如果在使用的过程中遇上什么问题,可以给我留言。

评论:

  1. 磨者 905 回复2016年08月31日 22时43分
    磨者
    gfudcvjhmbvutdcddyrdfy

  2. 磨者 972 回复2017年11月25日 22时19分
    磨者
    我想说的是可以使用 $_POST[]获取全局变量,为何还要进行传参数,
    还想知道的是 为何使用了 exec 函数 但是进行$reslut = $pdo->exec($strSql)  ;这里$reslut返回的却是false

  3. 磨者 973 回复2017年11月25日 22时19分
    磨者
    我想说的是可以使用 $_POST[]获取全局变量,为何还要进行传参数,
    还想知道的是 为何使用了 exec 函数 但是进行$reslut = $pdo->exec($strSql)  ;这里$reslut返回的却是false

  4. 磨者 974 回复2017年11月25日 22时19分
    磨者
    我想说的是可以使用 $_POST[]获取全局变量,为何还要进行传参数,
    还想知道的是 为何使用了 exec 函数 但是进行$reslut = $pdo->exec($strSql)  ;这里$reslut返回的却是false

  5. 磨者 975 回复2017年11月25日 22时19分
    磨者
    我想说的是可以使用 $_POST[]获取全局变量,为何还要进行传参数,
    还想知道的是 为何使用了 exec 函数 但是进行$reslut = $pdo->exec($strSql)  ;这里$reslut返回的却是false

  6. 磨者 976 回复2017年11月25日 22时19分
    磨者
    我想说的是可以使用 $_POST[]获取全局变量,为何还要进行传参数,
    还想知道的是 为何使用了 exec 函数 但是进行$reslut = $pdo->exec($strSql)  ;这里$reslut返回的却是false

  7. 我来说两句:

      切换  

    磨途歌检测发现,您当前使用的浏览器版本过低,要想使用画板模式,请先更新浏览器

      切换  

    磨途歌随机验证码