mysqli中关于update操作影响的行数可以有两种返回形式:
1. 返回匹配的行数
2. 返回影响的行数
默认情况下mysqli_affected_rows返回的值为影响的行数,如果我们需要返回匹配的行数,可以使用mysqli_real_connect函数进行数据库连接的初始化,并在函数的flag参数位加上:
| MYSQLI_CLIENT_FOUND_ROWS | return number of matched rows, not the number of affected rows |
mysqli中关于update操作影响的行数可以有两种返回形式:
1. 返回匹配的行数
2. 返回影响的行数
默认情况下mysqli_affected_rows返回的值为影响的行数,如果我们需要返回匹配的行数,可以使用mysqli_real_connect函数进行数据库连接的初始化,并在函数的flag参数位加上:
| MYSQLI_CLIENT_FOUND_ROWS | return number of matched rows, not the number of affected rows |
需要将accordion的所有tab全部收缩,默认情况下是默认展开第一个,查看jquery ui手册有collapsible属性可以设定,但是纯粹加这个属性并不能奏效,官网的demo也显示的有问题,第一个tab还是被展开了。搜索stackoverflow得到的答案:
[code="js"]
$( "#accordion" ).accordion({
collapsible: true,
active: false
});
[/code]
查看源代码:默认给active设置的0,这个参数影响了collapsible:true,导致第一个tab还是被展开了,这里需要强制将active设置成false
尝试解答以下问题:
我们的公共组件绝大部分都支持so形式的自定义插件,比如s++,qzhttp,ttc。在不停进程更新so的时候往往会产生coredump,并且肯定core得莫名其妙,core得让人心碎。
先看一下用cp的方式更新so的时候发生了什么事情
strace cp new.so old.so #strace是人间利器
发现老的so被trunc了,这个过程发生的具体的事情是:
所以,如果用相同的so去覆盖
所有问题的产生都是因为so被trunc了一把,所以如果不用turnc的方式就避免这个问题。Ok,该我们的install 上场了。
strace install new.so old.so
install 的方式跟cp不同,先unlink再creat,当unlink的时候,已经map的虚拟空间vma中的inode结点没有变,只有inode结点的引用计数为0是,kernel才把它干掉。
也就是新的so和旧的so用的不是同一个inode结点,所以不会相互影响。这时只有得启程序才会使用到新的so。所以采用这种方式的话就可以避免先stop进程,更新so,再重启进程这样比较耗时的操作。如果我们要拒绝用户将打印输出被重定向输出到其他地方,比如文件或者/dev/null,那么我们可以使用isatty函数来判定程序执行是否有被重定向输出。
示例代码如下:
[code="cpp"]
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc,char **argv){
if(!isatty(fileno(stdout))){
fprintf(stderr,"you are not a terminal!
");
exit(1);
}
/*********逻辑代码*********/
exit(0);
}
[/code]