php更新数据库返回值,php更新数据库字段

php每天抓取数据并更新新

以前我用过querylist插件抓数据,服务器写和定时器,每天固定时间去运行脚本。朝这个方式试试

为金林等地区用户提供了全套网页设计制作服务,及金林网站建设行业解决方案。主营业务为成都网站制作、成都网站建设、金林网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

高并发下数据的更新,应该 update table xxx set num = num - 1 的方式,这种方式可以保证数据的正确性。

但是会出现 num 为负数的问题,如果库存为负数,显然是不合理的。

于是,需要将 num 字段设置为 无符号整型,这样就不会出现负数了,因为,如果减到负数,就会更新失败。

但是这种依然会造成很多无用的更新语句的执行,是不合理的。

于是,update table xxx set num = num - 1 where num 0,

这样当 num 等于0之后就不会去更新数据库了,减少了很多无用的开销。

这种方式被称作“乐观锁”

此外,对于抢红包这种非整数的操作,我们应该转换为整数的操作。

关于抢购超卖的控制

一般抢购功能是一个相对于正常售卖系统来说独立的子系统,这样既可以防止抢购时的高并发影响到正常系统,

也可以做到针对于抢购业务的特殊处理。

在后台设计一些功能,可以就昂正常的商品加入到抢购活动中并编辑成为抢购商品,写入到抢购商品表,当然

也可以把抢购商品表写入redis而不是数据表。并且在原商品表写入一个同样的商品(id相同,用于订单查看,

此商品不可购买)

如果是数据表,为了控制超卖,需要对表进行行锁,更新的时候带上 where goods_amount 0。

如果是redis,使用 hincrby 一个负数来减库存,并且 hincrby 会返回改变后的值,再来判断返回值是否大于0,

因为redis每个命令都是原子性的,这样不用锁表就可控制超卖。

mongo php 操作 怎样更新一条数据

PHP操作MongoDB数据库的简单示例。

Mongodb的常用操作

参看手册,php官方的

也可以参看mongodb官方的教程。

一, Mognodb数据库连接

1)、默认格式

复制代码 代码示例:

$m = new Mongo();

//这里采用默认连接本机的27017端口,当然也可以连接远程主机如  192.168.0.4:27017,如果端口是27017,端口可以省略。

2)、标准连接

$m = new Mongo(“mongodb://${username}:${password}@localhost”);

实例:

复制代码 代码示例:

$m = new Mongo(“mongodb://127.0.0.1:27017/admin:admin”);

数据库的用户名和密码都是admin

数据库操作:

1)、插入数据:

复制代码 代码示例:

?php

//这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017

//如果端口是27017,端口可以省略

$m = new Mongo("mongodb://127.0.0.1:27017/admin:admin");

//选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m-selectDB("comedy");

$db = $m-comedy;

//选择comedy里面的collection集合,相当于RDBMS里面的表,也可以使用

$collection = $db-collection;

$db-selectCollection("collection");

/*********添加一个元素**************/

$obj = array("title" = "php1", "author" = "Bill Watterson");

//将$obj 添加到$collection 集合中

$collection-insert($obj);

/*********添加另一个元素**************/

$obj = array("title" = "huaibei", "online" = true);

$collection-insert($obj);

//$query = array("title" = "huaibei");

$query = array( "_id" = $obj['_id'] );

$cursor = $collection-find($query);

//遍历所有集合中的文档

foreach ($cursor as $obj) {

echo $obj["title"] . "\n";

echo $obj["_id"] . "\n";

}

//断开MongoDB连接

$m-close();

2)、带条件的查询

查询 title为huaibei的字段

1 $query = array( ”title” = ”huaibei” );

2 $cursor = $collection-find( $query );      // 在$collectio集合中查找满足$query的文档

常用的SQL转化为mongodb的条件

复制代码 代码示例:

mysql: id = 123

mongo: array(‘id’=123)

mysql: name link ’%bar%’

mongo: array(‘name’ = new MongoRegex(‘/.*bar.*/i’))

mysql: where id  10

mongo: array(‘id’ = array(‘$gt’ = 10))

mysql: where id = 10

mongo: array(‘id’ = array(‘$gte’ = 10))

mysql: where id  10

mongo: array(‘id’ = array(‘$lt’ = 10))

mysql: where id = 10

mongo: array(‘id’ = array(‘$lte’ = 10))

mysql: where id  1 and id  10

mongo: array(‘id’ = array(‘$gt’ = 1,’$lt’ = 10))

mysql: where id  10

mongo: array(‘id’ = array(‘$ne’ = 10))

mysql: where id in(123)

mongo: array(‘id’ = array(‘$in’ = array(1,2,3)))

mysql: where id not in(123)

mongo: array(‘id’ = array(‘$nin’ = array(1,2,3)))

mysql: where id = 2 or id = 9

mongo: array(‘id’ = array(‘$or’ = array(array(‘id’=2),array(‘id’=9))))

mysql: order by name asc

mongo: array(‘sort’=array(‘name’=1))

mysql: order by name desc

mongo: array(‘sort’=array(‘name’=-1))

mysql: limit 0,2

mongo: array(‘limit’=array(‘offset’=0,’rows’=2))

mysql: select name,email

mongo: array(‘name’,'email’)

mysql: select count(name)

mongo: array(‘COUNT’) //注意:COUNT为大写

更详细的转换参考

注意事项:

查询时,每个Object插入时都会自动生成一个独特的_id,它相当于RDBMS中的主键,用于查询时非常方便 (_id每一都不同,很像自动增加的id)

例如:

复制代码 代码示例:

?php

$param = array("name" = "joe");

$collection-insert($param);

$joe = $collection-findOne(array("_id" = $param['_id']));

print_R($joe);

$m-close();

返回结果:Array ( [_id] = MongoId Object ( [$id] = 4fd30e21870da83416000002 ) [name] = joe )

更改字段值:

复制代码 代码示例:

?php

$sign = array("title" = 'php1');

$param = array("title" = 'php1','author'='test');

$joe = $collection-update($sign, $param);

删除一个数据库:

复制代码 代码示例:

$m - dropDB(“comedy”);

列出所有可用数据库:

复制代码 代码示例:

$m-listDBs();   //无返回值

附,mongodb常用的数据库方法

MongoDB中有用的函数:

创建一个MongoDB对象

复制代码 代码示例:

?php

$mo = new Mongo();

$db = new MongoDB($mo,’dbname’);//通过创建方式获得一个MongoDB对象

删除当前DB

复制代码 代码示例:

?php

$db = $mo-dbname;

$db-drop();

获得当前数据库名

复制代码 代码示例:

?php

$db = $mo-dbname;

$db-_tostring();

选择想要的collection:

复制代码 代码示例:

A:

$mo = new Mongo();

$coll = $mo-dbname-collname;//获得一个collection对象

B:

$db = $mo-selectDB(’dbname’);

$coll = $db-collname;

C:

$db = $mo-dbname;

$coll = $db-collname;

D:

$db = $mo-dbname;

$coll = $db-selectCollectoin(’collname’);//获得一个collection对象

插入数据(MongoCollection对象):

MongoCollection::insert(array $a,array $options)

array $a 要插入的数组

array $options 选项

safe 是否返回操作结果信息

fsync 是否直接插入到物理硬盘

例子:

复制代码 代码示例:

$coll = $mo-db-foo;

$a = array(’a’=’b’);

$options = array(’safe’=true);

$rs  =$coll-insert($a,$options);

$rs为一个array型的数组,包含操作信息

删除数据库中的记录(MongoCollection对象):

MongoCollection::remove(array $criteria,array $options)

array $criteria  条件

array $options 选项

safe 是否返回操作结果

fsync 是否是直接影响到物理硬盘

justOne 是否只影响一条记录

例子:

复制代码 代码示例:

$coll = $mo-db-coll;

$c = array(’a’=1,’s’=array(’$lt’=100));

$options = array(’safe’=true);

$rs = $coll-remove($c,$options);

$rs为一个array型的数组,包含操作信息

更新数据库中的记录(MongoCollection对象):

MongoCollection::update(array $criceria,array $newobj,array $options)

array $criteria  条件

array $newobj 要更新的内容

array $options 选项

safe 是否返回操作结果

fsync 是否是直接影响到物理硬盘

upsert 是否没有匹配数据就添加一条新的

multiple 是否影响所有符合条件的记录,默认只影响一条

例子:

复制代码 代码示例:

$coll = $mo-db-coll;

$c = array(’a’=1,’s’=array(’$lt’=100));

$newobj = array(’e’=’f’,’x’=’y’);

$options = array(’safe’=true,’multiple’=true);

$rs = $coll-remove($c,$newobj,$options);

$rs为一个array型的数组,包含操作信息

查询collection获得单条记录(MongoCollection类):

array MongoCollection::findOne(array $query,array $fields)

array $query 条件

array $fields 要获得的字段

例子:

复制代码 代码示例:

$coll = $mo-db-coll;

$query = array(’s’=array(’$lt’=100));

$fields = array(’a’=true,’b’=true);

$rs = $coll-findOne($query,$fields);

如果有结果就返回一个array,如果没有结果就返回NULL

查询collection获得多条记录(MongoCollection类):

MongoCursor MongoCollection::find(array $query,array $fields)

array $query 条件

array $fields 要获得的字段

例子:

复制代码 代码示例:

$coll = $mo-db-coll;

$query = array(’s’=array(’$lt’=100));

$fields = array(’a’=true,’b’=true);

$cursor = $coll-find($query,$fields);

//排序

$cursor-sort(array(‘字段’=-1));(-1倒序,1正序)

//跳过部分记录

$cursor-skip(100);跳过100行

//只显示部分记录

$cursor-limit(100);只显示100行

返回一个游标记录对象MongoCursor。

针对游标对象MongoCursor的操作(MongoCursor类):

循环或结果记录:

复制代码 代码示例:

$cursor = $coll-find($query,$fields);

while($cursor-hasNext()){

$r = $cursor-getNext();

var_dump($r);

}

或者

$cursor = $coll-find($query,$fields);

foreache($cursor as $k=$v){

var_dump($v);

}

或者

$cursor = $coll-find($query,$fields);

$array= iterator_to_array($cursor);

PHP 进行数据库更新update操作,返回状态问题

update用mysql_query执行的时候能得到返回值,这个返回值说明了执行是否成功。

然后用mysql_affected_rows判断是否修改了数据

两个判断组合起来用就能满足你的需求了

php,Mysql数据库用UPDATE操作一行的数值后,如何取得操作结果?

这个应该没有什么解决办法,只能是改变一下数据库结构,update 返回值 bool 类型的 影响行数 或者 执行失败的 false 或者 mysql 抛出的异常,没办法获取到数据


分享名称:php更新数据库返回值,php更新数据库字段
转载注明:http://ybzwz.com/article/hdppcj.html