pdo
pdo对象的使用。pdo是一个统一抽象层,各种具体的数据库,依赖具体的驱动,如pdo_mysql,pdo_pgsq,pdo_sqlite等等。虽然安装依赖,但是,放心,php7以上,它们都已经在标准库了,可能是编译php的时候,并没有编译而已,所以,从标准的php源码中,拷贝即可(注意:一定要版本对应,才行,否则,各种报错等等)
golang也有统一的抽象层,java呢,对应的是jdbc。
配置
mysql
$db = [
'dsn'=>'mysql:host=;port=3403;dbname=;charset=utf8',
'user'=>'root',
'pass'=>'passwd',
];
$pdo = new \PDO($db['dsn'], $db['user'], $db['pass'], array(
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
));
pg
$db = [
'dsn'=> 'pgsql:host=uat-ydalg.yundasys.com;port=5432;dbname=gpdb;',
'user'=> 'gpadmin',
'pass'=> 'gpadmin',
];
$pdo = new \PDO($db['dsn'], $db['user'], $db['pass'], array(
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
));
sqlite
\define('DB_DSN','sqlite:dipain.db');
\define('DB_USER',null);
\define('DB_PASS',null);
字符集
如果不配置,则可能会出现,乱码或者全是?
\define('DB_DSN','mysql:host=10.172.58.20;port=3404;dbname=yii_uat2;charset=utf8');
参数
//fetch 参数
\PDO::FETCH_COLUMN //返回一个字段
PDO::FETCH_ASSOC // 返回一个关联数组,常用
PDO::FETCH_NUM // 返回一个以0开始的数组,即普通的数组
增删改查
初始化
$pdo = new \PDO($db['dsn'], $db['user'], $db['pass'], array(
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
));
方式1:直接查询
//方式1:
$stat = $pdo->query("select column_name from information_schema.columns where table_schema='yunchou' and table_name='td_msg_json';");
$data = $stat->fetchAll(PDO::FETCH_ASSOC);
方式2:变量绑定
适合查询、更新、删除等等。
//
$sql = 'SELECT ' . $field . ' FROM ' . $table . ' WHERE ' . $where;
$stat = $pdo->prepare($sql);
$stat->execute($param); //注意,返回true或false 所以,不能链式调用
// 查询时,获取数据 或fetchAll
$stat->fetch(\PDO::FETCH_ASSOC);
方式3:直接执行sql
$int_number = $pdo->exec($sql); //返回 int
方式4:逐行获取
本意是不想本地缓存数据,逐行读取,貌似,依然是一次读取到内存的样子。
$stat = $pdo->query($sql);
while($row = $stat->fetch(\PDO::FETCH_NUM)){
fputcsv($fd,$row);
}