资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

php7通用数据库类db php数据库编程

php7链接数据库问题

第一个问题: $db是对象,对象调用成员方法就是-

成都创新互联主营琼结网站建设的网络公司,主营网站建设方案,成都App制作,琼结h5微信小程序搭建,琼结网站营销推广欢迎琼结等地区企业咨询

第二个问题:mysql_query是php5之前的函数,他不太安全,其实还有mysqli_query扩展增强版,但这些都没有对象好用,为什么呢?因为每次使用都不是一个对象,但函数不一样,使用的是同一个函数,如果你学过java的线程大概就能知道怎么回事了。对象new 你不用之后会回收,但函数就未必了,这也是为安全考虑,目前对象比较安全。

第三个问题:这个问题很简单,你用的是对象连接,却使用函数,这本就不是一个东西,你没有给全局变量赋值(mysqli_connect($servername, $username, $password);),所以不能使用这个函数,这也就是安全问题(第二个问题,你看它一次只能使用一个连接,不像对象,可以new很多个,看出优劣了吧!这是进化的结果,因为php想干大型项目用对象,也比较最好管理),至于应该使用什么?$db -num_rows其实很简单的,就是把以前的函数封装成为对象,名字几乎不变

PHP7连接mysql数据库方法

1、用 mysql_connect 的方法,PHP7会报致命错误

$conn= mysql_connect('localhost','xueyanxiang','xueyanxiang');

Fatal error : Uncaught Error: Call to undefined function mysql_connect() in /Users/xueyanxiang/work/test/xue.php:31 Stack trace: #0 /Users/xueyanxiang/work/test/xue.php(119): xue-run() #1 {main} thrown in  /Users/xueyanxiang/work/test/xue.php  on line  31

原因是:

PHP5中使用mysql_connect()函数进行连接,但实际上,PHP5.5开始,MySQL就不推荐使用了,属于废弃函数

PHP7中貌似已经彻底不支持了,根据官网说明,取而代之的是如下两个:

本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之。参见 MySQL:选择

API 指南以及相关 FAQ 以获取更多信息。用以替代本函数的有:

mysqli_connect()

PDO::__construct()

使用时,不要在使用mysql_connect了,可以换用mysqli_connect(),用法基本类似吧,据说是面向对象的库。

php.ini中,也只有extension=php_mysqli.dll,而不再有extension=php_mysql.dll这个拓展了。

2、可以使用mysqli,对象化,方法名与被废弃的类似

$conn= mysqli_connect('localhost','xueyanxiang','xueyanxiang');

3、PDO工具,推荐使用

$dbh= "mysql:host=localhost;dbname=test";

$db= new PDO($dbh,'xueyanxiang','xueyanxiang');

$objQuery= $db-query("select * from user;");

$res= $objQuery-fetchAll(PDO::FETCH_ASSOC);

不填写参数的话,默认是关联和索引都有,如下图

php7 mongodb 扩展 真的很差吗

MongoDB\Driver\Manager::executeBulkWrite

这玩意还配置了一个巨大的类库来配合调用:就是这个: ,纯粹是脱裤子放P,多此一举,本来原生扩展就已经巨长、巨难用,还配一个根本没有简化任何代码的库有什么意义?甚至于调用这个类库比原生的名字更长、更啰嗦,而且多了一层封装就多一次bug机会。

这个库文件总共63个,看看,如果你随便写个脚本访问一下mongodb,还得包含63个文件,我TM整个项目都没有63个文件好不好?这些个写惯了java的没事就老老实实写java,都跑来写php,php是要解析执行的,又不像jvm那么编译优化执行,搞那么多文件,不影响执行速度吗?真是狗屎,所以完全不推荐用这个狗屎库。

但是这个扩展最奇怪的就是文档超级简陋,根本不能获得任何有价值的信息,所以只能靠摸索来了。

下面是我用到的由MongoClient迁移到MongoDB\Driver的差异点。

MongoClient插入或更新是同样的代码:

(new MongoClient())-{$db}-{$collection}-save($arr);

// 这个$arr数组可以直接含有 "_id" 索引来指定 mongodb文档的_id值,就这么简单粗暴,这才是php啊!

MongoDB\Driver,插入和更新需要区分:

$mongo = new MongoDB\Driver\Manager();

$bulk = new MongoDB\Driver\BulkWrite(['ordered' = true]);

$data = $mongo-executeQuery('db.collection', new MongoDB\Driver\Query([]), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED))-toArray();

if (empty($data[0])) { // 确定不存在,插入

$bulk-insert($arr);

} else { // 否者更新

$bulk-update([], array('$set' = $arr)); // $arr同样是刚才的数组

}

// 还没完,还要执行下一步:db.collection要替换成实际的数据库、集合名

$result = $mongo-executeBulkWrite('db.collection', $bulk, new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000));

// 返回插入或更新是否成功:

$ok = $result-getInsertedCount() || $result-getModifiedCount() ? 1 : 0;

// 真是够了!

查询一条记录:

MongoClient:

(new MongoClient())-{$db}-{$collection}-findOne(['_id' = $id]);

MongoDB\Driver:

$mongo = new MongoDB\Driver\Manager();

$result = $mongo-executeQuery('db.collection', new MongoDB\Driver\Query(['_id'=$id], []), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));

// 返回的$result是一个对象,需要手动转换成数组。

查询数量时候,需要注意:

$mongo = new MongoDB\Driver\Manager();

$cursor = $mongo-executeCommand($db, new MongoDB\Driver\Command($arr), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED));

// 这里$cursor是一个游标。需要注意$arr里的字段:

$arr = ['count'=$collection, 'query'=$query]; // 这里count必须排在前面,位置反了直接报异常。

查询结果集:

$mongo = new MongoDB\Driver\Manager();

$cursor = $mongo-executeQuery('db.collection', new MongoDB\Driver\Query($arr, $opts), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));

//注意,这里的 $arr和 $opts;

$arr = ['_id'= ['$in'= $ids] ]; // 根据id数组获取集合

$opts = ['limit'= $limit, 'skip'= $skip ]; // 不推荐

// 这里在传递$limit和$skip的时候,最好先转成整数,不然不生效:

$opts = ['limit'= (int) $limit, 'skip'= (int) $skip ]; // 推荐写法。

// 写到这里,让人怀疑是不是在用php了,怎么还需要这样的类型转换。字符串整数都不行!

基本就这样,推荐自己封装一个简单的MongoDB\Driver,而不是使用那个巨大无比的库、也不推荐直接用原生


当前题目:php7通用数据库类db php数据库编程
网址分享:http://cdkjz.cn/article/dohejgs.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220