<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • php語法基礎知識(php詳細安裝步驟)


    1、使用絕對路徑載入文件
    defined(‘ROOT’,pathinfo(__FILE__,PATHINFO_DIRNAME));
    require(ROOT.’/test.php’);
    2、寫入文件前,檢查目錄寫權限
    一般代碼:
    $content=”please input text”;
    $path=’e:/text/text.txt’;
    file_put_contents($path,$content);
    存在問題:寫或保存文件前,確保目錄是可寫的,假如不可寫輸出
    錯誤信息,在linux系統中,需要處理權限,目錄權限不當會導致
    很多問題,文件也有可能無法讀取。
    1、父目錄不存在
    2、目錄存在,但文件不可寫
    3、文件被寫鎖住
    改良代碼:
    $content=’please input text’;
    $dir=’e:/text’;
    $path=$dir.’/text.txt’;
    if(is_writable($dir)){
    file_put_contents($path,$contents);
    }else{
    die(‘文件夾有權限設置或者文件不可寫’);
    }
    3、不要依賴submit按鈕值來檢查表單的提交行為
    一般代碼:
    if($_POST[‘submit’]==’Save’){
    //other thing
    }
    上訴情況大多數情況下正確,除了應用多語言,save可能代表其他含義,不好區分它們所以不要依賴它們
    改良代碼:
    if($_SERVER[‘REQUEST_METHOD’]==’POST’&&isset($_POST[‘submit’])){
    //other thing
    }
    4、生成唯一的id 使用函數uniqid()2013/9/1
    5、array_fill($start_index,$num,$mix)數組填充
    6、mt_rand()與rand() 區別:mt_rand()比rand()產生隨機數的平均速度快4倍
    8、比較常見的輸出:echo,var_dump(),var_export()
    9、所有魔術方法:__construct() __destruct() __clone() __set() __get() __isset() __unset() __call() __invoke()
    10、reset系列相關函數;reset()將數組的內部指針移動到第一個位置 current() key() next()
    11、OOP關鍵字:class final instanceof private protected public static abstruct interface extends implements :: ->
    12、查詢出當天的記錄: select * from notes where to_days(notes_date)=to_days(now()); to_days()為Mysql時間函數用于計算出天數
    13、查詢出昨天的記錄: select * from notes where (TO_DAYS(NOW())-TO_DAYS(notes_date)) BETWEEN 1 and 2;
    14、查詢出近7天的記錄:select * from notes where DATE_SUB(CURDATE(),INTERVAL 7 DAY) <DATE(notes_date); curdate()得到當前年月日,date_sub()計算時間差
    15、查詢出近30天的記錄:select * from notes where date_sub(curdate(),interval 30 day)<date(notes_date)
    16、查詢出本月的記錄:select * from notes where DATE_FORMAT(notes_date,’%Y%m’)=DATE_FORMAT(CURDATE(),’%Y%m’); date_format(date,format)格式化時間
    17、查詢出上月的記錄:select * from notes where PERIOD_DIFF(DATE_FORMAT(CURDATE(),’%Y%m’),DATE_FORMAT(notes_date,’%Y%m’))=1; period_diff(P1,P2)返回P1到P2之間的月份間隔數,其中P1和P2的格式是YYYYMM或YYMM
    18、在MVC中所有的相對路徑參照路徑都是入口文件 index.php
    19、if(array_key_exists($key,get_object_vars($this))) 在一個類中中判斷傳入的參數鍵是否在類中
    20、 __DIR__:動態得到當前文件所在目錄
    dirname()得到上級目錄 dirname(__DIR__) 動態得到當前文件所在目錄的上級目錄
    __FILE__ 動態得到包含文件名的全路徑
    basename(__FILE__) 動態得到文件名 包括后面的地址欄參數 如 test.php?a=method&id=2
    21、讀取txt文件中的信息并以換行為分隔存入到數組中: $txt=file_get_contents(text.txt); $string_arr=explode(“\n”,$txt) //此處的分隔符必須要是雙引號將\n包含起來,不能使用單引號
    22、使用fread讀取文件內容
    function get_file_content($file_path){
    $fp=fopen($file_path, ‘r’);
    $data=”;
    while (!feof($fp)){ //feof($handle) 其中feof表示測試文件指針是否已經到了文件結束的位置
    $data.=fread($fp, 1024);
    }
    fclose($fp);
    return $data;
    }
    23、ini_set()函數的使用
    24、array_unique(array) 移除數組中重復的項
    25、strlen()與mb_strlen()的區別:
    都是用于獲取字符串的長度,其中str_len只針對單字節編碼字符,也就是說它計算的是字符串的總字節數。如果是多字節編碼如gbk和utf8,使用
    strlen得到的不是字符的個數而是該字符的總字節數??梢允褂胢b_strlen獲取其字符個數,使用mb_strlen要注意兩點,一是要開啟mbstring擴展
    二是指定字符集
    $str=”傳智播客php學院”;
    echo strlen($str); //21 當前頁面是utf-8字符集,如果是gbk則結果為15
    echo mb_strlen($str); //21 注意 未指定字符集,使用內部字符編碼(單字節)
    echo mb_strlen($str,’utf8′); //9
    自定義函數取得帶有中文字符字符串的長度
    function strlen_utf8($str){
    $arr=preg_split(‘//u’,$str,-1,PREG_SPLIT_NO_EMPTY);
    $len=count($arr);
    return $len;
    }
    26、截取帶有中文的字符串使用 mb_substr()
    $str=”你好我叫shushu”;
    echo mb_substr($str,2,3,’utf8′);
    function substr_utf8($str,$start,$len){
    return implode(“”,array_slice(preg_split(‘//u’,$str,-1,PREG_SPLIT_NO_EMPTY),$start,$len));
    }
    27、post與get傳輸的最大容量分別是: post根據php.ini文件的配置 post_max_size(默認為8M),get則是2k
    28、打印前一天的時間
    strtotime()函數用于將英文文本的日期時間轉換為unix時間戳
    得到前一天的時間:date(“Y-m-d H:i:s”,strtotime(“-1 day”));
    得到上一個月的時間:date(“Y-m-d H:i:s”,strtotime(“-1 Month”))
    得到上一年的時間:date(“Y-m-d H:i:s”,strtotime(“-1 Year”)) 或者 date(“Y-m-d H:i:s”,strtotime(“last year”))
    得到上一周的時間:date(“Y-m-d H:i:s”,strtotime(“-1 Week”));
    計算2009-4-1與200-3-2兩個日期之差:(strtotime(‘2009-4-1’)-strtotime(‘2009-3-2’))/(3600*24) 得到兩個日期的日期之差
    29、list()函數,把一個數組中的值賦給list中的變量 如 list($a,$b)=array(‘xiaozhang’,’xiaoli’);
    30、implode()將數組轉成字符串 emplode()將字符串轉為數組
    31、preg_split()函數:使用正則表達式對字符串分割
    語法:preg_split(正則表達式,分割的字符串,limit,$flag) 其中limit為-1表示沒有限制,$flag為PREG_SPLIT_NO_EMPTY表示只返回非空部分
    preg_split(‘//u’,$str,-1,PREG_SPLIT_NO_EMPTY);
    32、array_slice() 從數組中取出一段來 語法:array_slice(array,offset,[length])
    33、trim() 消去字符串左右兩邊的空格 語法:trim($string,【$charlist】) 如果$charlist缺省則消去$string中左右兩邊的空格,如果存在$charlist則消去
    $string中兩邊的$charlist 如 trim(‘ashushusdsa’,’a’) 得到的結果是字符串 :shushusds 消掉了左右兩邊的a
    其他兩個函數 ltrim()與rtrim()分別表示消掉左邊和消掉右邊的指定字符串
    34、何為可變變量:獲取一個變量的值作為這個可變變量的變量名
    35、以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句:LoadModule php5_module ‘c:/php/php5apache2.dll’; 動態加載PHP模塊
    然后再用語句 AddType application/x-httpd-php .php 使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
    36、取得一個全路徑的文件的擴展名的五種方法
    //取得一個全路徑的擴展名
    //方法1
    function getExtension1($file_path){
    //對文件地址做分割得到數組
    $path_arr=preg_split(‘/\./’, $file_path,-1,PREG_SPLIT_NO_EMPTY);
    return $path_arr[(count($path_arr)-1)];
    }
    //方法2
    function getExtension2($file_path){
    return pathinfo($file_path,PATHINFO_EXTENSION);
    }
    //方法3
    function getExtension3($file_path){
    $arr=explode(‘/’, $file_path);
    $file_arr=$arr[(count($arr)-1)];
    $extension=explode(‘.’, $file_arr);
    return $extension[(count($extension)-1)];
    }
    //方法4
    function getExtension4($file_path){
    $extension=strrchr($file_path,’.’);
    return ltrim($extension,’.’);
    }
    //方法5
    function getExtension5($file_path){
    return substr($file_path, strrpos($file_path, ‘.’)+1);
    }
    echo getExtension4(‘f:/test/a.txt’);
    37、intval() 函數 將’101′ 轉換為101
    38、將open_dir轉換為OpenDir
    function get($string){
    $arr=explode(‘_’,$string);
    $txt=array_map(‘toUpper’,$arr); //使用array_map()函數使得數組$arr中的每一個元素都調用了函數toUpper
    return implode(”,$txt);
    }
    function toUpper($word){
    $word{0}=strtoupper($word{0});
    return $word;
    }
    39、array_map(callback,array) 該函數的作用是使得數組array中的每一個元素都回調callback函數
    40、統計字符在字符串中出現的次數:substr_count(字符串,字符)
    //自定義函數:統計字符在字符串中出現的次數
    function getNumber($string,$key){
    $arr=explode($key, $string);
    return count($arr)-1;
    }
    echo getNumber(‘gsggsgsgs’,’g’);
    41、ord($string)函數 得到字符串中的ASCII碼 如:0-9為48-57 只能得到第一個字符的ASCII值
    42、刪掉一個網站的所有的Cookie $_SERVER[‘HTTP_COOKIE’]得到包含所有cookie的字符串 每個cookie之間用”;”分割 如:name1=xiaozhang; name2=xiaoli; name4=xiaoluo
    //刪除一個站點的所有cookie
    $cookie_str=$_SERVER[‘HTTP_COOKIE’];
    $cookies_arr=explode(‘;’, $cookie_str);
    foreach ($cookies_arr as $cookie){
    $cookie_arr=explode(‘=’, $cookie); //得到cookie名與cookie值的數組
    $cookie_name=trim($cookie_arr[0]); //必須要使用trim()去掉兩邊的空格
    //echo $cookie_name;
    setcookie($cookie_name,”,time()-3600);
    }
    43、chr()
    44、ini_get()取得PHP配置信息 ini_set() 配置PHP
    45、extract()
    46、str_repeat(字符串,次數) 該函數是重復的產生字符串 如:$str=str_repeat(‘=’,10) 將生成10個“=”的字符串
    47、mysql_real_escape_string() 轉義SQL中的特殊字符
    48、fsockopen()
    49、feof()
    50、header()
    51、header_set()
    if(!header_set()){
    header(‘
    Location:http://www.baidu.com’);
    exit;
    }
    52、gmdate()
    53、glob()
    54、serialize() 對數據序列化
    55、unserialize() 對數據反序列化
    56、json_decode() 對json格式的數據進行編碼
    57、json_encode() 對變量進行json編碼
    58、unlink()刪掉文件
    59、finfo_open() finfo_file()
    60、ucfrist() 將字符串的首字母大寫,主要應用于MVC地址欄中平臺與模塊的單詞拼寫
    61、addslashes()
    62、get_magic_quotes_gpc()
    63、array_walk_recursive()
    64、IE8下不支持html5標簽的解決方法:使用javascript:document.createElement(‘header’); 這句話即告訴IE8說header為一個標簽
    65、array_unique(array) 消除數組中重復的項,返回為一個數組
    66、js事件監聽:
    IE:
    attachEvent(type,callback) type:事件名 如 onclick,callback:事件處理程序
    基于w3c模型的瀏覽器(firefox 等):
    addEventListener(type,callback,flag) type:事件名 如click 注意,這里沒有on前綴 callback:事件處理程序 flag: 使用捕捉模型還是冒泡模型 默認:冒泡
    解決瀏覽器兼容性問題:
    /**
    * obj: 為操作的dom對象
    * type: 事件名 不加 ‘on’
    * callback: 事件處理程序
    function addEvent(obj,type,callback){
    if(window.addEventListener){
    obj.addEventListener(type,callback);
    }else{
    obj.attachEvent(‘on’+type,callback);
    }
    }
    67、js中的event對象 window.event 只支持IE瀏覽器 火狐等W3C瀏覽器不支持 這個需要在匿名函數中傳遞event對象 function(event){}
    如:
    obj.onclick=function(event){
    var evt;
    if(window.event){
    //解決IE瀏覽器問題
    evt=window.event;
    }else{
    //解決w3c瀏覽器問題
    evt=event;
    }
    }
    68、js中的事件冒泡機制與阻止冒泡:
    <script type=”text/javascript”>
    window.onload=function(){
    document.getElementById(‘div1’).onclick=function(){
    alert(‘div1’);
    }
    document.getElementById(‘div2’).onclick=function(){
    alert(‘div2’); //發生事件冒泡 依次彈出div3、div2
    }
    document.getElementById(‘div3’).onclick=function(){
    alert(‘div3’); //發生事件冒泡 依次彈出div3、div2、div1
    }
    }
    </script>
    <div id=”div1″>
    div1
    <div id=”div2″>
    div2
    <div id=”div3″>
    div3
    </div>
    </div>
    </div>
    阻止冒泡發生
    function stopBubble(evt){
    if(window.event){
    //ie瀏覽器
    window.event.cancelBubble=true;
    }else{
    evt.stopPropagation();
    }
    }
    69、js 字符串的search方法:var str=’try you best’; str.search(‘tr’) 說明:該方法是查找字符串中匹配的字符
    如果找到則返回索引位置,如果沒有找到則返回-1 實例:js版搜索功能
    70、多關鍵字的搜索功能實現原理:將關鍵字字符串使用空格分隔,得到數組,再for遍歷逐個匹配即可 如 str=’中國 中華 臺灣’ 使用空格分隔成數組再使用 for遍歷
    搜索實例:
    $link=mysql_connect(‘localhost’,’root’,’123456′);
    mysql_select_db(‘myshop’);
    mysql_query(‘set names utf8’);
    $str=’諾基亞 三星’;
    $arr=explode(‘ ‘, $str);
    $sql=”select goods_name from ecs_goods where”;
    for ($i=0;$i<count($arr);$i++){
    $key=$arr[$i];
    $sql .=” goods_name like ‘%$key%’ or”;
    }
    $sql=substr($sql, 0,-2);
    $result=mysql_query($sql);
    while ($row=mysql_fetch_assoc($result)){
    var_dump($row);
    }
    71、背景透明度兼容性:IE:filter:alpha(opacity:30) 火狐、谷歌:opacity:0.3
    72、元素的:offsetLeft、offsetRight、offsetWidth、offsetHeight 的使用
    73、JS中根據類名篩選出指定的元素 通用方法
    function getByClass(oParent,sClass){
    var aEle=
    oParent.getElementsByTagName(‘*’); //從父節點中得到所有的子節點,其中通配符“*”表示匹配所有的元素
    var aResult=[];
    for(var i=0;i<aEle.length;i++){
    if(aEle[i].className==sClass){
    aResult.push(aEle[i]);
    }
    }
    return aResult;
    }
    74、JS中判斷變量數據類型使用 typeof 例如:typeof str.match(book) 得到的是一個object類型(數組對象模型)
    75、php中的析構函數,銷毀對象的順序是先定義的銷毀,原因是對象是名是存在于棧中,棧是先進后出的,名存放在棧中,地址存放在堆中
    變量存放在棧中,因為棧有著 小、快的特點,便于變量的反復的讀取和寫入。堆相對于棧而言,有著大、慢的特點
    所謂的引用傳遞是指:兩個棧中的對象指向堆中的同一個內存
    按值傳遞:普通變量
    按地址傳遞:對象變量
    76、JS正則表達式的分組匹配
    var pattern=/^([a-z]+)\s([0-9]{4})$/i;
    var str=’google 2012′;
    // alert(pattern.exec(str));
    alert(pattern.exec(str)[0]); //得到的是全部字符
    alert(pattern.exec(str)[1]); //得到的是第一個分組匹配成功的字符
    alert(pattern.exec(str)[2]); //得到的是第二個分組匹配成功的字符
    77、JS中對象的方法就是屬性
    function Person(p_name){
    this.name=p_name;
    }
    var p1=new Person(‘xoazhang’);
    p1.say=function(){
    alert(‘我叫’+this.name);
    }
    78、JS中檢測數據類型:使用 typeof和 instanceof constructor
    兩者的區別:typeof運算符在檢查基本數據類型的時候非常好用,但檢測引用類型的時候,它就不是那么好用
    通常,我們并不想知道它是不是對象,而是想知道它到底是什么類型的對象。因為數組也是object,null也是object
    所以此時,你需要使用 instanceof 運算符來查看

    //檢查數據類型,使用 typeof 和 instanceof
    var str=new String(‘test’);
    alert(typeof str);
    var arr=new Array();
    alert(typeof null);
    alert(str instanceof String);
    alert(arr instanceof Array); //是否是數組
    var obj={};
    alert(obj instanceof Object); //是否是對象
    var reg=/g/;
    alert(reg instanceof RegExp); //是否是正則表達式
    function Person(){ }
    var person=new Person();
    alert(person.constructor); //得到person對象的構造器
    79、解決JS只能取得行內樣式的值,而不能取得外聯文件樣式的值的方法
    if(typeof window.getComputedStyle!=’undefined’){
    //支持w3c瀏覽器
    return window.getComputedStyle(this,null)[attr]; //其中this表示當前元素對象
    }else if(typeof this.currentStyle!=’undefined’){
    //支持IE
    return this.currentStyle[attr];
    }
    80、狀態碼的問題
    81、使用正則表達式將頁面中的js腳本清除掉
    var str=’2323<script>test<\/script>ssss’;
    var pattern=/(<script.*>.*<\/script>)/;
    var result=str.replace(pattern,’ ‘);
    alert(result);
    82、eval()方法 檢查JS代碼并執行 如 eval(‘3+5′) 得到的結果不是字符串’3+5’ 而是8 因為它執行了3+5這個運算
    83、css中設置透明色:IE:filter:alpha(opacity=30) W3C:opacity:0.3
    84、window.onresize=function(){窗體發生改變時的動作} window.onresize表示當窗體發生改變時調用的方法
    85、
    document.documentElement.clientWidth :得到當前瀏覽器的最大寬度 document.documentElement.clientHeight:得到當前瀏覽器的最大高度
    86、獲取網頁元素的絕對位置
    網頁元素的絕對位置指該元素的左上角相對于整個網頁左上角的坐標。首先每個元素都有offsetTop和offsetLeft屬性,表示該元素的左上角與父容器
    (offsetParent對象)左上角的距離。所以,只需要將這兩個值進行累加,就可以得到該元素的絕對坐標
    使用下面函數完成
    //得到元素左邊坐標
    function getElementLeft(element){
    var actualLeft=element.offsetLeft;
    var current=element.offsetParent;
    while(current!=null){
    actualLeft+=current.offsetLeft;
    current=current.offsetParent;
    }
    return actualLeft;
    }
    //得到元素上邊坐標
    function getElementTop(element){
    var actualTop=element.offsetTop;
    var current=element.offsetParent;
    while(current!=null){
    actualTop+=current.offsetTop;
    current=current.offsetParent;
    }
    return actualTop;
    }
    87、解決瀏覽器對事件對象的兼容問題
    function(event){
    var ev=event||window.event; //其中window.event支持IE瀏覽器,從匿名函數中傳過來的參數event支持W3C瀏覽器
    }
    88、div拖拽效果的實現
    //div拖拽效果實現
    var login=document.getElementById(‘login’);
    login.onmousedown=function(event){
    var e=event||window.event;
    var diffX=
    e.clientX-login.offsetLeft;
    var diffY=e.clientY-login.offsetTop;
    document.onmousemove=function(event){
    var e=event||window.event; //解決瀏覽器兼容問題,其中window.event表示支持IE,event表示支持w3c
    login.style.left=e.clientX-diffX+’px’;
    login.style.top=e.clientY-diffY+’px’;
    }
    document.onmouseup=function(){
    this.onmousemove=null;
    this.onmouseup=null;
    }
    }
    89、JS取消瀏覽器的默認行為
    var prevent=function(event){
    var e=event||window.event;
    if(typeof e.preventDefault !=’undefined’){
    //W3C
    e.preventDefault();
    }else{
    //IE
    e.returnValue=false;
    }
    }
    90、js中取得字符串的第一個字母 如: string=’test’; 得到t這個單詞 使用 string.charAt(0)
    91、js檢查瀏覽器的兼容性
    (function(){
    var version=
    navigator.userAgent.toLowerCase();
    window.sys={}; //其中{}表示申明為一個對象
    //IE瀏覽器
    if((/msie ([\d.]+)/).test(version)){
    var info=version.match(/msie ([\d.]+)/);
    sys.ie=info[1];
    }
    //Firefox瀏覽器
    if((/firefox\/([\d.]+)/).test(version)){
    var info=version.match(/firefox\/([\d.]+)/);
    sys.firefox=info[1];
    }
    //alert(version); chrome
    if((/chrome\/([\d.]+)/).test(version)){
    var info=version.match(/chrome\/([\d.]+)/);
    sys.chrome=info[1];
    }

    })();
    92、filemtime、fileatime、filemtime
    93、定義常量常用代碼
    if(!defined(‘SMARTY_DIR’)){
    define(‘SMARTY_DIR’,dirname(__FILE__));
    }
    94、定義操作系統文件分割符
    if(!defined(‘DS’)){
    define(‘DS’,DIRECTORY_SEPARATOR);
    }
    95、strip_tags
    96、encodeURIComponent() JS中中文轉碼 此方法與php中的urlencode方法效果是一樣的
    在ajax的get傳值中,如果值為中文,則需要轉碼再在php文件中接收并解碼
    html文件:
    xhr.open(‘get’,’./01.php?name=xiaozhang&addr=’+encodeURIComponent(‘北京’),true); //true表示異步傳輸
    php文件:
    $addr=urldecode($_GET[‘addr’]);
    97、創建ajax對象
    function createXHR(){
    if(window.ActiveXObject){
    //支持IE
    var versions=[‘Microsoft.XMLHTTP’,’MSxml2.XMLHTTP’,’MSxml2.XMLHTTP2.0′,’MSxml2.XMLHTTP3.0′,’MSxml2.XMLHTTP4.0′,’MSxml2.XMLHTTP5.0′];
    for(var i=0;i<versions.length;i++){
    var xhr=new ActiveXObject(versions[i]);
    return xhr;
    }
    }else{
    //支持W3C
    var xhr=new XMLHttpRequest();
    return xhr;
    }
    }
    98、ajax之post請求
    var xhr=createXHR();
    xhr.open(‘post’,’./01.php’,true); //true表示異步傳輸 設置為post
    xhr.onreadystatechange=function(){
    if(xhr.readyState==4){//表示已經ajax已經處理完成
    alert(xhr.responseText);
    }
    }
    xhr.setRequestHeader(‘Content-Type’,’
    application/x-www-form-urlencoded’); //POST傳遞必須設置請求頭信息
    xhr.send(‘name=xiaoli&age=20’); //這里填寫post傳遞的數據,而不是null
    99、ajax之get請求
    var xhr=createXHR();
    //注意點:get地址欄傳值時,如果值為中文則需要使用encodeURIComponent函數對中文字符編碼
    xhr.open(‘get’,’./01.php?name=xiaozhang&addr=’+encodeURIComponent(‘北京’),true); //true表示異步傳輸 設置為get
    xhr.onreadystatechange=function(){
    if(xhr.readyState==4){//表示已經ajax已經處理完成
    alert(xhr.responseText);
    }
    }
    xhr.setRequestHeader(‘Content-Type’,’
    application/x-www-form-urlencoded’); //POST傳遞必須設置請求頭信息
    xhr.send(null);
    100、ajax中get與post請求的區別
    1、get請求傳遞參數使用地址欄,post請求傳遞參數使用send()方法
    2、get請求中文參數需要轉碼:使用encodeURIComponent()方法對中文字符轉碼
    3、post請求需要設置請求頭信息使用:setRequestHeader(‘content-type’,’
    application/x-www-form-urlencoded’);
    101、ajax中同步與異步請求的區別:同步:在一個時間段只有一個請求,彼此之間有先后的依賴關系。異步:在一個時間段可以由多個請求,彼此之間沒有先后
    的依賴關系。
    102、禁止瀏覽器緩存該頁面(ajax中解決IE緩存問題)
    header(‘Cache-control:no-cache’);
    header(‘Pragma:no-cache’);
    header(‘Expires:-1’);
    解決ajax緩存第二種方法是:對每次請求時在地址欄后面加上一個隨機數 如:’data.php?num=’+Math.random()
    103、JS中的eval()方法 :把參數當成表達式運行
    104、php中的模式修正符 s:表示化為一行 U:表示禁止貪婪匹配
    105、border-collpase:collpase
    106、array_intersect(array array1,array array2) 計算數組的交集 array_diff(array array1,array array2) 計算數組的差集
    107、JS調試: console.log(調試的對象)
    108、dom中設置屬性 setAttribute(k,v)
    109、jQuery中ajax的實現 $.ajax({type:’get’,url:’地址’,dataType:’html’,data:’傳遞的數據’,success:function(msg){alert(msg)}})
    110、php中如何判斷一個字符串存在某個字符 strpos(‘需要查找的字符串’,’匹配的字符’)
    111、截取一個URL地址的后綴名
    function getExt($url){
    $extension_str=pathinfo($url,PATHINFO_EXTENSION);
    $index=strpos($extension_str, ‘?’);
    if($index){
    $arr=explode(‘?’, $extension_str);
    $ext=$arr[0];
    }else{
    $ext=$extension_str;
    }
    return $ext;
    }
    112、MVC框架中空方法、空模塊處理 使用魔術方法 __call() 如果為出現空方法與空操作則會調用 __call()方法觸發
    113、get_defined_constancts(true)得到系統定義和用戶自定義的的常量 使用這個函數去查所有用戶自定的常量再在模板中使用
    在ThinkPHP模板中使用常量能代替很多繁雜的操作 : $Think.const.__GROUP__ 得到的是定位到group目錄下路徑 :
    /10-15TP/shop/go/index.php/admin
    $Think.const.__URL__ 得到的路徑是:
    /10-15TP/shop/go/index.php/admin/Manager 定位到了控制器
    114、mysql中時間戳與一般時間格式的轉換:
    unix_timestamp(‘1997-8-10 22:23:00’) 得到的是 875996580
    from_unixtime(時間戳) 得到的是以’YYYY-MM-DD HH:MM:SS’格式的日期
    from_unixtime(時間戳)+0 得到的是以’YYYYMMDDHHMMSS’格式的日期
    115、func_get_args() 得到函數所有的參數數組
    116、php的作用域是不重疊的,相互之間不能訪問。所以在函數內部不能訪問函數外的全局變量,在函數外部
    不能訪問函數內部的局部變量。 每個函數都有獨立的局部作用域,相互之間不可訪問。
    117、array_merge(數組1,數組2) 合并數組
    118、js中的join()方法將數組以元素以指定分割符組成一個字符串
    var arr=[‘apple’,’sanxin’,’huasuo’];
    var new_arr=arr.join(‘,’); //得到的結果是 apple,sanxin,huasuo
    119、js將 “apple,sanxin,huasuo” 轉換為js數組 str.split(‘,’)
    120、根據索引移除數組中的某個元素的方法:
    function removeByIndex(arr,index){
    arr.splice(index,1);
    }
    121、根據值移除數組中的某個元素的方法
    function removeByValue(arr,value){
    for(var i=0;i<arr.length;i++){
    if(arr[i]==value){
    arr.splice(i,1);
    }
    }
    }
    122、js中的splice(index,nums,item1)方法 該函數時想數組中刪除或添加項目,
    其中index與nums兩個參數必選,item1為可選。如果選了則先刪除指定索引元素,再將item1添加到刪除的位置。
    index表示數組索引,nums表示個數,items表示添加的項目 該函數會改變原來的數組
    var arr=[‘xiaozhang’,’xiaowu’,’xiaoli’,’xiaoliu’];
    arr.splice(2,1); //刪除數組索引為2的元素
    arr.splice(1,2); //刪除數組索引以1開始之后的兩個元素
    arr.splice(1,1,’xiaoluo’) //刪除數組索引為1并將xiaoluo添加到剛刪除的位置
    123、jq實現復選框開關效果
    var flag=false;
    $(‘a’).click(function(){
    $(“input[type=’checkbox’]”).attr(‘checked’,!flag);
    flag=!flag;
    })
    實現復選框反選效果
    $(‘a’).click(function(){
    var inputs=$(“input[type=’checkbox’]”);
    for(var i=0;i<inputs.length;i++){
    if($(inputs[i]).attr(‘checked’)){
    $(inputs[i]).attr(‘checked’,false)
    }else{
    $(inputs[i]).attr(‘checked’,true);
    }
    }
    });
    124、檢查圖像是否已經被完全加載進來
    $(‘#theImage’).attr(‘src’,’image.jpg’).load(function(){
    alert(‘全部加載進來’);
    })
    125、數據庫查詢優化
    使用索引:index
    創建index:
    方法1:create index index_name on users(username)
    方法2:alter table tab_name add index[index_name](username)
    使用索引需要注意的問題:如果表執行比較多的插入與修改數據時,不建議使用索引。索引主要用于查詢
    126、mysql優化七個發面:
    1、表的設計符合3NF
    滿足1NF:1、表的字段具有原子性,不能分割 2、表的字段不能重復
    2NF:不能存在完全相同的記錄(記錄唯一性),一般是給表一個主鍵來控制,非業務邏輯主鍵
    3NF:表中不能由冗余的數據
    2、建立合理的索引
    3、使用分表技術
    4、優化SQL語句
    5、創建適當存儲過程,觸發器,視圖
    6、對my.ini的配置優化配置緩存大小
    7、升級硬件與軟件
    127、explain 指令可以來分析mysql是如何執行你的SQL語句 基本用法:explain sql語句
    explain select * from table\G 其中 \G表示以樹形的方式查看sql語句結構
    128、數據庫以查詢為主選擇數據庫引擎為MyISAM
    數據庫以插入與更新為主選擇數據庫引擎為InnoDB
    mysiam 適用于效率比較高,安全性不夠的
    innodb 適用于安全性高,效率稍微低點
    129、連接查詢
    1、交叉連接:也稱笛卡爾積 得到的結果是表1與表2的乘積 select * from 表1 cross join 表2 on 條件
    2、內連接:兩個表中的只有滿足條件的記錄才會出現在結果集中,不滿足條件的
    不管是表1還是表2都不會出現。
    select * from 表1 inner join 表2 on 條件
    3、左外連接 簡寫為 left join 左邊會顯示左表的所有記錄,右邊顯示右表的匹配成功的記錄,匹配不成功的
    則用null填充
    4、右外連接 簡寫為 right join 右邊會顯示右表的所有記錄,左邊顯示匹配成功的記錄,匹配不成功的用null填充
    5、自連接 主要用于自己查詢自己
    130 視圖:視圖是虛擬表 視圖是文本文件里面存放的是sql語句 sql執行生成的是二進制文件
    創建視圖:create view view1 as select * from table_name
    刪除視圖:drop view view1
    使用視圖:select * from view1
    131、單例模式
    class MySQL{
    private static $instance=null;
    private static function __construct(){
    mysql_connect(‘127.0.0.1′,’root’,’123456′);
    }
    //公開實例化方法
    public static function getInstance(){
    if(!self::$instance instanceof self){
    self::$instance=new self;
    }
    return self::$instance;
    }
    //禁止克隆
    private function __clone(){

    }
    }
    132、多個進程同時寫入同一個文件成功
    $fp=fopen(‘a.txt’,’w+’);
    if(flock($fp,LOCK_EX)){
    //獲得寫鎖 寫數據
    fwrite($fp,’test’);
    //解除鎖定
    flock($fp,LOCK_UN);
    }else{
    echo ‘文件鎖定中’;
    }
    133、得到url地址的擴展名
    function getExt($url){
    $arr=parse_url($url); //將url轉換為地址
    $file=basename($arr[‘path’]); //得到文件
    explode(‘.’,$file);
    }
    134、檢查合法日期
    function checkDate($date){
    if(date(‘Y-m-d H:i:s’,strtotime($date))==$date){
    return true;
    }else{
    return false;
    }
    }
    135、smarty模板內建函數
    {foreach from=數組 key=’key’ item=’value’}
    {foreachelse}
    {/foreach}
    foreach的內置變量
    $
    smarty.foreach.name.iteration:索引(從1開始)
    $
    smarty.foreach.name.total: 循環的總次數
    136、smarty開啟緩存及緩存時間:
    $smarty->caching=true;
    $smarty->cache_lifetime=7200; //設置緩存時間
    默認緩存時間為3600秒 $cache_lifetime=3600
    檢查緩存:$smarty->isCached(“tpl.html”)
    清除緩存:$smarty->clearCached(‘tpl.html’);
    清除所有緩存:$smarty->clearAllCached();
    局部緩存:$smarty->assign(‘var’,$var,true); 第三個參數表示是否不緩存
    {$var nocache=true} 指定$var不緩存
    {nocache}
    不緩存的內容
    {/nocache}
    137、smarty模板fetch讀取某個文件內容并輸出 {fetch file=’文件名’ isassign=’var’} 表示保存本次結果但不輸出
    138、json是屬性的集合
    139、prototype:使用原因:擴展對象當前實例的屬性或方法。功能:返回對象構造器的引用
    140、閉包原理:當一個函數里面包含另一個函數,并且返回里面函數的值,則當在函數外部使用一個全局變量
    指向返回的函數的首地址時,里面的函數所占用的內存不會被回收,而函數內部的局部變量也不會被回收。這就是閉包原理。
    function f1(){
    var i=10;
    function f2(){
    alert(i);
    }
    return f2;
    }
    var d=f1(); //得到f2的首地址
    d(); //執行f2()
    141、正則表達式的常用模式:
    1、忽略大小寫模式(i) /^test$/i
    2、多行模式(m) /^test$/m
    3、懶惰模式(U) /^test$/U
    4、支持UTF-8轉義表達式(u) /^test$/u
    142、過濾所有的html標簽的正則表達式:<\/?[^>]+> 其中:\/?表示斜杠可無可有,匹配開始和關閉標簽。[^>]+表示如果不是右尖括號的字符
    重復一次或多次。
    143、XSS攻擊:指的是css和javascript腳本攻擊,主要在地址欄和論壇留言表單中 ,解決方案是:對特殊字符“<”,“>”等html標簽過濾
    可以使用 htmlspecialchars() 或者使用正則表達式過濾。
    143、microtime(true) 表示微妙數。該函數主要用于測試一個過程的執行總時間。用結束時間減去開始時間。
    144、在使用Session中,session_start()必須在程序最開始執行,前面不能有任何輸出內容。但是有時候確實需要輸出或者不能確定是否有輸出則可以如下:
    ob_start();
    session_start();
    $_SESSION[‘user’]=’xiaoluo’;
    ob_end_flush();
    145、禁用Cookie之后,傳遞SessionID可以通過 URL或者表單來傳遞。如下
    a.php:
    echo “<a href=new.php>new1</a>”;
    $a=session_name();
    $b=session_id();
    echo “<a href=new.php?a=$b>new2</a>”;

    new.php:
    $session_name=session_name();
    //取得sessionid
    $sessionID=$_GET[$session_name];
    //使用session_id設置獲得的Session
    session_id($sessionID);
    session_start();
    var_dump($_COOKIE);
    var_dump($_SESSION);
    146、javascript進行加密驗證和非平衡圖形驗證碼
    147、IP限制
    148、Token法
    149、表單欺騙
    150、getenv(‘REMOTE_ADDR’) 得到環境變量的函數
    151、MySQL常見引擎對比:
    MyISAM: 非事務存儲引擎,表鎖 支持小數據,小并發,適用于頻繁查詢
    InnoDB: 支持事務引擎,行鎖 支持大數據,大并發,適用于插入更新比較多的應用
    152、SQL注入:
    如:select * from table where user=’xiao’ and pwd=’111′
    下面的SQL語句可以繞過驗證
    select * from table where user=’xiao’ and pwd=’111′ or 1=1
    這條語句可以繞過用戶名和密碼的驗證。
    一般而言,如果用戶名或密碼通過GET傳遞過來則 如下地址可以繞過用戶名與密碼驗證

    http://www.chuanzhi.com/10-25/06sql.php?user=xiao&pwd=admin’ or ‘1=1
    防SQL攻擊可以使用函數 addslashes(string) 會把所有傳入所有的'(單引號)、”(雙引號)、\(反斜杠)和空字符
    153、文件緩存
    154、ignore_user_abort() 關閉瀏覽器時PHP腳本也將繼續執行
    155、set_time_limit() 設置腳本最大執行時間,默認值為30秒,如果為0表示沒有限制。
    PHP定時執行任務的實現
    config.php文件
    <?php return 1; ?>
    test.php文件
    <?php
    ignore_user_abort();
    set_time_limit(0);
    $interval=60*30;
    do{
    $run=require(‘config.php’);
    if(!$run){
    die(‘process abort’);
    }else{
    //要執行的代碼
    sleep($interval); //等待5分鐘
    }
    }while(true)
    ?>
    156、javascript對URL編碼的函數:
    編碼函數:encodeURI(string) 該函數是對整個URL編碼
    解碼函數:decodeURI(string)
    編碼函數:encodeURIComponent() 該函數是對組成部分進行個別編碼
    157、設置客戶端緩存:
    注意:
    header(‘Cache-Control:max-age=86000,must-revalidate’);
    header(‘Last-Modified:’.gmdate(‘D,d M Y H:i:s’).’GMT’);
    header(‘Expires:’.gmdate(‘D,d M Y H:i:s’,time()+’86400′).’GMT’);
    注意:HTTP的日期時間是格林威治時間(GMT),而不是本地時間
    例如:Expires:Fri,30 Oct 1998 12:41:12 bm GMT
    158、日志管理
    PHP日志:
    打開PHP的Log記錄,只需要在php.ini文件中設置如下選項
    Log_errors = On //開啟日志記錄和記錄的錯誤等級
    LogLevel warn
    error_log = e:/error.log //記錄Log的位置。
    159、ThinkPHP中URL訪問的幾種模式
    160、ThinkPHP中的令牌
    161、array_merge($arr1,$arr2) 合并數組
    162、設置PHP.ini文件最大并發數、apache最大并發數
    163、瀏覽器端使用JS正則表達式驗證 服務器端使用php正則表達式驗證
    164、PHP中多態的使用
    function add(Person person){
    if(person instanceOf chinese){
    echo ‘中國人的類’;
    }
    if(person instanceOf usa){
    echo ‘美國人的類’;
    }
    if(person instanceOf english){
    echo ‘英國人的類’;
    }
    }
    165、構建流暢類的接口
    class Goods{
    private $good_name;
    private $good_price;
    public function setName($good_name){
    $this->good_name=$good_name;
    return this;
    }
    public function setPrice($good_price){
    $this->good_price=$good_price;
    return this;
    }
    }
    $goods=new Goods();
    $goods->setName(‘xiaozhang’)->setPrice(‘2000’);
    166、PHP的斷點續傳
    167、關于虛擬主機的詳細配置信息(重要)、
    168、正則表達式反向引用:引用字表達式內容時,如果在正則表達式直接使用使用\1號,如果在另外地方使用用$1
    169、apache發生錯誤,看錯誤日志可以可以方便調試
    170、將session保存到memcached中
    171、對myisam的存儲引擎表,進行碎片整理。optimize table 表名
    172、create table table_1 like table_2 根據創建結構相同的表
    173、a標簽的href和onclick同時使用時會發生的問題:a標簽的href執行頁面跳轉,onclick執行ajax請求。
    當兩者同時使用時,a標簽會先執行跳轉,ajax請求會中斷,也就是說ajax請求不到數據。
    解決方案是:阻止a標簽的默認行為,當ajax請求數據完成后再再執行a標簽的頁面跳轉
    174、dede中在html模板頁面中引入某模板的標簽是 {
    dede:global.cfg_templets_skin/}
    如:<link href=”{
    dede:global.cfg_templets_skin/}/css/index.css” type=”text/css” rel=”stylesheet”/>
    175、網站圖片的現加載效果
    176、格式化小數的函數 round(數字,2) 表示保留兩位小數
    177、以換行轉化為數組 explode(“\r\n”,$str) 使用\r\n的原因是與操作系統有關。
    178、服務器優化措施:
    1、查看慢查詢的條數,定位性能脖頸
    show global status like ‘%slow%’
    2、適當使用Query Cache
    3、增加Mysql最大連接數
    查看最大連接數:show variables like ‘max_connections’
    4、從表中刪除大量數據后,可運行 optimize table tab_name 進行碎片整理
    5、對于MyISAM,適當設置 table_cache
    179、壓力測試軟件:ab.exe apache的bin目錄下。ab.exe -c 100 -n 1000 地址
    180、刪除地址欄參數的算法
    181、Sphinx 詞庫 搜狗詞庫 語言包的制作
    182、把Sphinx 安裝成一個系統服務 –install
    183、ifnull(字段名,’test’) 數據庫中判斷字段名如果為空為輸出test
    184、dedecms中的防腳本攻擊的函數:在
    include/helpers/filter.helper.php文件中
    185、filemtime()得到文件最后修改時間
    186、緩存內容
    ob_start(); //開啟緩存
    include ‘./test.html’; //將該數據寫到緩存中
    $_content=ob_get_content(); //得到緩存內容
    ob_clear(); //清空緩存區
    187、實現局部不緩存的,使用ajax去實現。
    188、var_export()打印出帶有php語法格式的字符串
    $content=var_export(數組,true) 不會直接輸出出來,但是可以用變量接受
    var_export(數組,false) 直接輸出
    該函數可以將數組信息以有效的PHP語法格式寫到文件中
    189、對數組做緩存
    方案1:序列化數組存到文件中,用時再反序列化
    方案2:直接使用var_export()格式化數組,再寫到文件中
    190、TP框架中的實例化模型 $model=M(‘Model’)與$model=D(‘model’)的區別
    如果需要要使用模型中的數據,則使用D,如果只是需要使用TP模型中的方法則使用M
    191、如何取json得數據
    var json={‘person’:[{‘name’=>’xiaozhang’,’age’:20,’sex’:’male’},{‘name’:’xiaowu’,’age’:20,’sex’:’famale’}]}
    取得json中的某一個值:json.person[0].name 得到的是person節點下的第一個數組下的name的值 xiaozhang
    192、使用空模型,應用場合:帶有連接查詢的SQL語句的執行,可以實例化空模型,再調用query()
    193、無限極分類
    腳本延遲執行:sleep(10)延遲10秒 不定參數 func_get_args()
    194、ckeditor的使用
    195、$.ajax({
    type:’post’,
    url:”
    data:$(‘form’).serilize(), //技巧部分 得到表單中的所有序列化數據
    success:function(msg){

    }
    })
    196、stript_tags()過濾html標簽
    197、$(str).each(function(k,v){
    alert(v);
    })
    198、set_time_limit(0) 設置腳本執行時間為沒有限制
    199、parse_url($url) 解析域名 得到的是一個數組:hhtp,wwww.baidu.com,/name/xiaoming
    200、開啟安全模式下,有些函數是失敗的,如mkdir,fopen,fread,fwrite,exec,system等涉及到文件系統的系統函數不能執行
    默認是關閉的safe_mode=off 開啟是safe_mode=on
    201、char、varchar、text的區別
    char :255字符
    varchar:65535字節
    text:65535字符
    202、SQL注入攻擊:
    當在URL地址提交 id=1 or 1=1時會產生SQL注入 防范方法是使用intval(value)將數據轉換成整數
    使用 addslashes(str) 驗證字符串,將單引號””“轉換成”\’“ 雙引號“””轉換為”\”“
    使用mysql_real_escape_string() 轉義sql語句中的特殊字符
    203、跨站腳本攻擊:使用htmlspecialchars函數來防范
    203、在php.ini文件中將magic_quotes_gpc=on時,它會把提交的變量中的所有的單引號,雙引號,反斜線和空字符會自動轉化為含有反斜線的轉義字符。
    204、SQL注入專題
    1、select注入:sql語句:select * from user where username like ‘%$search%’ order by username
    注入語句:aabb%’ or 1=1 order by id#
    注入成的語句是:select * from user where username like ‘%aabb%’ or 1=1 order by id #order by username
    加入沒有含有aabb的用戶名,那么or 1=1使返回值依然為真,使其返回所有值
    還可以注入:%’ order by id#
    注入成功的語句是:select * from user where username like ‘% %’ order by id#order by username
    2、update users set password=’$pwd’,
    205、char與varchar的區別:
    char與varchar的區別在于兩者的保存方式和檢索方式
    char為固定長度,varchar為可變長度,如char(4),varchar(4) 如果為’ab’則 char為’ab ‘未知的長度以空格填充,而varchar為’ab’不會以空格填充
    檢索方式:’ab ‘ varchar數據類型檢索出來是原數據’ab ‘,而char數據類型檢索出來的是’ab’會刪除尾部的空格
    float、decimal的區別
    float為浮點數,decimal為定點數,float為產生不精確的情況,如111.32可能會變成111.31
    206、TP中打印出SQL語句信息$this->getLastsql()
    207、PHP中使用eval()可以將字符串解釋為php腳本執行 如
    $str=”echo ‘xiaozhang’;”;
    eval($str);
    208、SQL優化:
    優化的一般步驟:1、使用show status了解SQL的執行效率 2、定位執行效率低的SQL語句(通過慢查詢日志文件或slow processlist)
    3、通過explain分析低效的SQL語句() 4、采取對應的優化措施
    使用show status 命令了解各種SQL的執行頻率,其中show session status 顯示的是session級別的統計結果,show global status 顯示的是global級別的結果
    在show status中 下面的參數對MyIsam和Innodb存儲引擎都有計數
    1、Com_select 執行select操作的次數
    2、Com_insert 執行insert操作的次數
    3、Com_update 執行update操作的次數
    4、Com_delete 執行delete操作的次數
    以下幾個參數時對Innodb存儲引擎計數
    1、Innodb_rows_read select查詢返回的行數
    2、Innodb_rows_inserted 執行Insert操作插入的行數
    3、Innodb_rows_updated 執行update操作更新的行數
    4、Innodb_rows_deleted 執行delete操作刪除的行數
    對于事物型的應用,通過Com_commit和Com_rollback可以了解事務提交和回滾的情況
    以下幾個參數可以了解數據庫的基本情況
    1、Connections 試圖連接Mysql服務器的次數
    2、Uptime 服務器的工作時間
    3、Slow_queries 慢查詢的次數
    通過explain分析低效的SQL語句
    select_type: select 類型
    table: 輸出結果集的表
    type: 表示表的連接類型 當表中只有一行是type的值時為system是最佳的連接類型
    當select的表連接沒有使用索引時,type的值為all,表示對該表為全表掃描,這時需要通過創建索引
    來提高表連接的效率。
    possible_keys: 表示查詢時,可以使用的索引列
    key: 表示使用的索引
    key_len: 索引長度
    rows: 掃描范圍
    extra 執行情況
    索引的存儲類型目前只有兩種(btree和hash),具體和表的模式相關
    myisam btree
    innodb btree
    memory hash,btree
    btree為二叉樹 hash為哈希
    查看索引使用情況:如果索引正在工作,Handler_read_key的值將很高。這個值代表了一個行被索引值讀的次數
    Handler_read_rnd_next的值高則意味著查詢運行低效,并且應該建立索引補救。
    show status like ‘Handler_read%’
    優化措施:整理文件碎片:optimize table (刪除大量數據后)
    優化group by語句:默認情況下mysql排序所有group by col1,col2 查詢時會隱式的指定order by col1,col2 但是你又想
    避免排序結果的消耗,可以執行order by null禁止排序。
    209、字符串的反轉,如:$str=’hello,world’ 不使用php函數
    function fn1($str){
    $len=strlen($str);
    $new_str=”;
    for($i=$len-1;$i>=0;$i–){
    $new_str.=$str[$i];
    }
    return $new_str;
    }
    210、php中操作mongodb
    將對應的版本的mongodb.dll文件放入php的ext文件夾下,開啟mongodb.dll的擴展
    $mongo=new Mongo(); //創建Mongo對象
    $data=array(‘name’=>’xiaoming’,’age’=>20);
    $mongo->cms->user->insert($data); //執行插入
    //修改操作 在控制臺中的修改是:db.user.update({‘name’:’xiaoluo’},{‘$set’:’xiaoli’})
    $mongo->cms->user->update(array(‘name’:’xiaoluo’),array(‘$set’:’xiaoli’))
    //取出數據
    $arr=$mongo->cms->user->find(); //得到的是一個游標
    while($arr->hasNext()){
    $d=$arr->getNext(); //取得下一條記錄是數據的格式
    echo $d[‘name’];
    echo $d[‘age’];
    }
    211、在控制臺下操作mongodb
    切換數據庫:use cms 切換到cms數據庫中(由于mongodb是無模式的數據庫所以如果不需要主動創建數據庫,只要里面插入數據則會自動生成數據庫)
    插入數據: db.user.insert({‘name’:’xiaozhang’},{‘age’:20})
    刪除數據: db.user.remove({‘name’:’xiaoluo’}) //刪除了name為xiaoluo的一條記錄
    修改數據: db.user.update({‘name’:’xiaowu’},{‘$set’:{‘age’:20}}) //將name為xiaowu的一條記錄修改name為xiaoli 如果沒有age這個字段則主動添加上
    查找數據: db.user.find() //查找出所有數據
    按條件查詢:db.user.find({‘name’:’xiaoluo’}) //查找出name為xiaoluo的記錄
    查找數據: db.user.findOne() //查找出一條記錄
    使用游標查詢數據
    var data=db.user.find(); //得到一個游標 不能使用for語句遍歷輸出
    while(data.hasNext()){
    var dd=data.next();
    print(dd.name);
    print(dd.age);
    }
    212、mongodb的特點:
    1、面向文檔的數據庫
    2、無模式(無需建表,也無需建數據庫)
    3、以BSON格式存儲數據(一種類JSON的格式)
    4、javascript作為操作語言
    5、支持多種語言:php、python、java、c++
    6、支持GridFS

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费