启东的个人博客 - function
type: channel
link: https://echo.solo90.com/tag/function/
items: 前后端分离页面之前的传参总结
items: php面向对象编程（十一）abstract抽象类
items: PHP 身份证精确匹配验证【转】
items: PHP页面静态化,ob_start，output_buffering
items: PHP遍历数组的几种方法
items: PHP字符串处理函数大全
items: PHP中A与B两个位置间的距离(经纬度)
items: PHP跨域访问的3种方法
items: PHP优秀函数集合
items: PHP的mysqli函数操作数据库

前后端分离页面之前的传参总结
type: item
date: 2019-04-10T10:46:00+00:00
description: Dcloud的mui的传参方式和接收 mui.openWindow({ id:'cast-detail', url:'./cast-detail.html', extras:{ castId:item.id } });接收mui.plusReady(function() { var self = plus.webview.currentWebview(); //添加hide事件 var id=self.castId; mui.getJSON("http://api.xxx.xx/"+id,function(resp){}); });以事件的方式触发@tap事件触发函数、另一个页面接收微信小程序标签绑定触发 bindtap onProductsItemTap:function(event){ var id=event.currentTarget.dataset.id; wx.navigateTo({ url:"../product/product?id="+id; }); }接收Page({ /** * 页面的初始函数 */ data:{ }, /** * 声明周期函数--监听页面加载 */ onload:function(options){ //接收参数 var id=options.id; } });普通页面 Title 跳转链接传参 `` 接收 function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 var r = window.location.search.substr(1).match(reg); //匹配目标参数 // if (r != null) return encodeURI(r[2]); return null; //返回参数值 if (r != null) return r[2]; return null; //浏览器默认在中文上传参给encodeUrl了 } alert(getUrlParam('id')); alert(decodeURI(getUrlParam('title'))); ![图][1]

php面向对象编程（十一）abstract抽象类
type: item
date: 2018-01-18T09:10:00+00:00
description: 抽象类与抽象方法php5开始支持抽象类和抽象方法，用abstract修饰的类表示这个类是一个抽象类，用abstract修饰的方法表示这个方法是一个抽象方法。抽象类不能被实例化<?php abstract class Test{ //直接报错 不能实例抽象类 } $test =new Test();抽象方法只能声明，不能定义其具体的功能实现(方法体)abstract class Test{ abstract function t(){} // Fatal error: Abstract function Test::t() cannot contain body in F:\Work\test.php on line 4 //不能有方法体 也就是 {} 。 }任何一个类，如果他里面至少有一个方法是被声明为抽象的，那么这个类就必须被声明为抽象类。<?php class TTT { function T(){ echo "TTTTTTTTT "; } abstract function t1(); /** 这么写是错误的 * 类TTT包含1个抽象方法，因此必须声明为抽象类 * Fatal error: Class TTT contains 1 abstract method and must * therefore be declared abstract or implement * the remaining methods (TTT::t1) */ }正确的写法<?php abstract class TTT { function T(){ echo "TTTTTTTTT "; } abstract function t1(); //正确写法 }抽象类的继承抽象类继承另外一个抽象类时，不用重写其中的抽象方法。抽象类中，不能重写抽象父类的抽象方法。这样的用法，可以理解为对抽象类的扩展。<?php abstract class Test{ abstract function T(); abstract function tt(); } class T extends Test{ function T(){ echo "我是T"; } //所有抽象方法必须实现要不报错 function tt() { echo "我是tt"; } } $t= new T(); $t->T(); //会出两个 我是T 方法名等于类名 相当于__construct PHP7报错 但也出现继承抽象类的非抽象类必须实现抽象类中的所有抽象方法 <?php abstract class Test{ abstract function T(); abstract function tt(); } abstract class test1 extends Test { /* * abstract function T(); * 不能重复定义父类的抽象方法 * Fatal error: Can't inherit abstract function Test::T() * (previously declared abstract in test1) */ abstract function T2(); } class TTT extends test1{ function T(){ } function T2(){ } function tt(){} } //必须实现所有抽象方法抽象类的应用设计模式之模板模式模板模式又叫模板方法模式，在一个类中定义一个算法的骨架，而将一些步骤延迟到子类中。[scode type="blue"]模板方法使得子类可以在不改变算法结构的情况下，重新定义算法中的某些步骤。业务场景：银行计算利息(interest)的时候都是以本金(principal)乘以利率(interset rate)得到.利率对每个银行都不一样，而且对于不同的存款方式和本金利率又不同。所以在账户这个类的相关方法里，我们只定义算法骨架，但不具体实现。实现由各个银行的子类来完成，[/scode]<?php abstract class Account{ protected $principal=1000; //本金 protected $interest; //利息 function getInterest(){ //利息=利率*本金 $this->interest=$this->principal * $this->getInterestRate(); return $this->interest; } /** * 获取本金 * @return mixed */ public function getPrincipal() { return $this->principa…

PHP 身份证精确匹配验证【转】
type: item
date: 2018-01-12T11:53:00+00:00
description: 身份证号码的结构: 要进行身份证号码的验证，首先要了解身份证号码的编码规则。我国身份证号码多由若干位数字或者数字与字母混合组成。早期身份证由15位数字构成，这主要是在1980年以前发放的身份证，后来考虑到千年虫问题， 因为15位的身份证号码只能为1900年1月1日到1999年12月31日出生的人编号，所以又增加了18位身份证号码编号规则。18位身份证号码各位的含义:1-2位省、自治区、直辖市代码；3-4位地级市、盟、自治州代码；5-6位县、县级市、区代码；7-14位出生年月日，比如19820426代表1982年4月26日；15-17位为顺序号，其中17位（倒数第二位）男为单数，女为双数；18位为校验码，0-9和X。15位身份证号码各位的含义:1-2位省、自治区、直辖市代码；3-4位地级市、盟、自治州代码；5-6位县、县级市、区代码；7-12位出生年月日,比如670401代表1967年4月1日,与18位的第一个区别；13-15位为顺序号，其中15位男为单数，女为双数；[scode type="green"]备注:作为尾号的校验码，是由把前十七位数字带入统一的公式计算出来的， 计算的结果是0-10，如果某人的尾号是0－9，都不会出现X，但如果尾号是10，那么就得用X来代替。 X是罗马数字的10，用X来代替10。 15位号码和18位号码的区别，多2位年份和1位识别码，把出生年月的前2位数去掉，没有最后一位的验证码,剩下就是15位身份证号码；[/scode]这仅仅是按照地域来划分的，与各地的经济情况没有任何关系1字头的为《华北区》，北京11、天津12、河北13、山西14、内蒙152字头的为《东北区》，就是东北三省了昂。辽宁21、吉林22、黑龙江233字头的为《华东》六省一市，上海31、江苏32、浙江33、安徽34、福建35、江西36、山东374字头的为《华中地区+华南地区》，河南41、湖北42、湖南43、广东44、广西45、海南465字头的为《西南地区》，重庆50、四川51、贵州52、云南53、西藏54 为什么重庆的编码是50不是51？[scode type="red"]中国的身份证制度是1984年开始全国实行的。四个直辖市，其他三个都是49年建国时即设立的，但重庆是1997年才被提升为直辖市的。1984年设置身份证地区代码时，直辖市的编码一般都排在每个大区的最前面，比如华北区，北京是11，天津是12；华东区，上海是31。既然设为了直辖市，就应该与省同等级对待，重庆的身份证号码就不能再和四川一样是51了，但直辖市又得放在大区编码的最前面，所以重庆市的编码便定为了50。所以去看重庆人家里保存的老身份证，还都是51开头的。[/scode]6字头的为《西北区》，陕西61、甘肃62、青海63、宁夏64、新疆657字头为中华民国实际控制区域，也就是我们所说的台湾，台湾718字头为特别行政区，香港81、澳门829字头为海外地区，海外91<?php $card=new Idcard(); $sex=$card->getChinaIDCardSex(); $shengfen=$card->get_shenfen(); var_dump($shengfen); class Idcard { public $aWeight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]; //十七位数字本体码权重 public $aValidate = ['1','0','X','9','8','7','6','5','4','3','2']; //mod11,对应校验码字符值 public $birthday;//出生年月 public $sex;//性别 public $xingzuo;//星座 public $shuxiang;//属相 public function __construct(){} /** * 验证出生日期 */ public function isChinaIDCardDate($iY, $iM, $iD) { $iDate = $iY . '-' . $iM . '-' . $iD; $rPattern = '/^(([0-9]{2})|(19[0-9]{2})|(20[0-9]{2}))-((0[1-9]{1})|(1[012]{1}))-((0[1-9]{1})|(1[0-9]{1})|(2[0-9]{1})|3[01]{1})$/'; if(preg_match($rPattern, $iDate, $arr)){ $this->birthday = $iDate; return true; } return false; } /** * 根据身份证号前17位, 算出识别码 */ public funct…

PHP页面静态化,ob_start，output_buffering
type: item
date: 2017-12-19T06:46:00+00:00
description: 为什么要静态化页面?当面对大流量或者页面执行业务比较多的是时候，可以从动态查询数据库到直接不用查数据，直接访问静态页面，可以数据库和服务器的压力。让用户访问速度更快。一般生成静态化页面两种方式：1.主动(服务器主动生成)。2.被动(客户端访问生成)。说到页面静态化，不得不先了解一个东西,叫buffer,那么buffer是啥？英文译过来的意思是缓冲。buffer其实就是缓冲区，一个内存地址,主要用于储存数据区域打比方说，我打开个编辑器或者PS也行，让我们运行软件工作的时候，数据没有保存的时候，我们的正在操作的代码和数据在哪里，其实就在buffer里，当我们把buffer空间写满了，或者保存的时候，就会把数据写入磁盘中，当然PHP的这个buffer和这个不完全一样。先说一下PHP脚本输出流程 echo/print -(数据) -> php buffer -> tcp buffer -> 客户端浏览器为什么这么说下面看一下示例：先介绍个函数叫 ob_get_contents() 说明 返回输出缓冲区的内容<?php $a= "这是第一次! "; echo $a; echo ob_get_contents() ; //获取当前缓冲区内容 //页面结果 这是第一次! 这是第一次!这说明$a经过了缓冲区。打开php.ini查找output_buffering，有的是on有的是4096(缓冲区的大小)等于4k,我的是php7.0.9是4096，5.3版本的是on。我在关掉缓冲区做个示例(如果是低版本的php可以直接把output_buffering = on注释掉)函数介绍 ob_end_clean() 说明 清空（擦除）缓冲区并关闭输出缓冲<?php ob_end_clean();//关闭缓冲区 $a= "这是第一次! "; echo $a; echo ob_get_contents() ; //获取当前缓冲区内容 //页面结果 这是第一次!再次证明了数据的输出顺序为什么说写满buffer才输出呢在看一个例子<?php for ($i = 0; $i < 10; $i++) { echo $i ."-->".date('H:i:s')." "; sleep(1); // } //网页输出结果是等待网页响应了10秒输出的 0-->13:54:26 1-->13:54:27 2-->13:54:28 3-->13:54:29 4-->13:54:30 5-->13:54:31 6-->13:54:32 7-->13:54:33 8-->13:54:34 9-->13:54:35下面是写满了一个buffer就是4K输出的<?php for ($i = 0; $i < 10; $i++) { //随便创建一个文本里面写一下字符串使内容超过4KB echo file_get_contents('./1.txt') . $i . ' '; sleep($i +1); } //页面输出结果 断断续续可以看到间断性输出，浏览器界面不会一直保持空白。 证明每写满一个php buffering，数据就会发送到客户端浏览器。 ?>下面在介绍个函数ob_start() 说明 打开输出控制缓冲 (当然还有一个功能官方手册上没有说，我在实际应用中在output_buffering默认开启的情况下使用ob_start()能把缓冲区扩展到无限大)。同样刚才的示例<?php ob_start(); for ($i = 0; $i < 10; $i++) { //随便创建一个文本里面写一下字符串使内容超过4KB echo file_get_contents('./1.txt') . $i . ' '; sleep($i +1); } //页面输出结果 是等待页面时间，执行页面结束后，一次性显示出全部结果 ?> 下面看一下thinkphp5框架中的fetch()方法 public function fetch($template = '', $vars = [], $replace = [], $config = [], $renderContent = false) { // 模板变量 $vars = array_merge(self::$var, $this->data, $vars); // 页面缓存 ob_start(); ob_implicit_flush(0); // 渲染输出 $method = $renderContent ? 'display' : 'fetch'; $this->engine->$method($template, $vars, $config); // 获取并清空缓存 $content = ob_get_clean(); // 内容过滤标…

PHP遍历数组的几种方法
type: item
date: 2017-11-05T09:40:00+00:00
description: PHP中遍历数组有三种常用的方法：使用for语句循环遍历数组；使用foreach语句遍历数组；联合使用list()、each()和while循环遍历数组;这三种方法中效率最高的是使用foreach语句遍历数组。从PHP4开始就引入了foreach结构，是PHP中专门为遍历数组而设计的语句，推荐大家使用。先分别介绍这几种方法。使用for语句循环遍历数组值得大家注意的是使用for语句循环遍历数组要求遍历的数组必须是索引数组。PHP中不仅有关联数组而且还有索引数组，所以PHP中很少用for语句循环遍历数组。实例代码如下：<?php $arr = array('one','two','php'); $num = count($arr); for($i=0;$i<$num;++$i){ echo $arr[$i].' '; } ?>[scode type="green"]注释：上例代码中我们先计算出数组$arr中元素的个数，然后才使用在for语句，这样做很高效的。因为如果是for($i=0;$i< count($arr);++$i)的话，每次循环都会计算数组$arr中元素的个数，而使用上面的方式可以减去这种开销。使用++$i也是为了提高效率，前面有文章我们提到过，建议大家再看看。上面代码的输出结果为：onetwoPHP[/scode]使用foreach遍历<?php $arr = array('one','two','PHP'); foreach($arr as $value){ echo $value.' '; } ?> <?php //定义数组 $arr = array('one','two','PHP'); foreach($arr as $k=>$v){ echo $k."=>".$v." "; } 联合使用list()、each()和while循环遍历数组each()函数需要传递一个数组作为一个参数，返回数组中当前元素的键/值对，并向后移动数组指针到下一个元素的位置。list()函数，这不是一个真正的函数，是PHP的一个语言结构。list()用一步操作给一组变量进行赋值。<?php //定义循环的数组 $arr = array('website'=>'one','webname'=>'two') while(list($k,$v) = each($arr)){ echo $k.'=>'.$v.' '; } ?>

PHP字符串处理函数大全
type: item
date: 2017-11-04T14:15:00+00:00
description: addcslashes — 为字符串里面的部分字符添加反斜线转义字符addslashes — 用指定的方式对字符串里面的字符进行转义bin2hex — 将二进制数据转换成十六进制表示chop — rtrim() 的别名函数chr — 返回一个字符的ASCII码chunk_split — 按一定的字符长度将字符串分割成小块convert_cyr_string — 将斯拉夫语字符转换为别的字符convert_uudecode — 解密一个字符串convert_uuencode — 加密一个字符串count_chars — 返回一个字符串里面的字符使用信息crc32 — 计算一个字符串的crc32多项式crypt — 单向散列加密函数echo — 用以显示一些内容explode — 将一个字符串用分割符转变为一数组形式fprintf — 按照要求对数据进行返回，并直接写入文档流get_html_translation_table — 返回可以转换的HTML实体hebrev — 将Hebrew编码的字符串转换为可视的文本hebrevc — 将Hebrew编码的字符串转换为可视的文本html_entity_decode — htmlentities()函数的反函数，将HTML实体转换为字符htmlentities — 将字符串中一些字符转换为HTML实体htmlspecialchars_decode — htmlspecialchars()函数的反函数，将HTML实体转换为字符htmlspecialchars — 将字符串中一些字符转换为HTML实体implode — 将数组用特定的分割符转变为字符串join — 将数组转变为字符串，implode()函数的别名levenshtein — 计算两个词的差别大小localeconv — 获取数字相关的格式定义ltrim — 去除字符串左侧的空白或者指定的字符md5_file — 将一个文件进行MD5算法加密md5 — 将一个字符串进行MD5算法加密metaphone — 判断一个字符串的发音规则money_format — 按照参数对数字进行格式化的输出nl_langinfo — 查询语言和本地信息nl2br — 将字符串中的换行符“\n”替换成“ ”number_format — 按照参数对数字进行格式化的输出ord — 将一个ASCII码转换为一个字符parse_str — 把一定格式的字符串转变为变量和值print — 用以输出一个单独的值printf — 按照要求对数据进行显示quoted_printable_decode — 将一个字符串加密为一个8位的二进制字符串quotemeta — 对若干个特定字符进行转义rtrim — 去除字符串右侧的空白或者指定的字符setlocale — 设置关于数字，日期等等的本地格式sha1_file — 将一个文件进行SHA1算法加密sha1 — 将一个字符串进行SHA1算法加密similar_text — 比较两个字符串，返回系统认为的相似字符个数soundex — 判断一个字符串的发音规则sprintf — 按照要求对数据进行返回，但是不输出sscanf — 可以对字符串进行格式化str_ireplace — 像str_replace()函数一样匹配和替换字符串，但是不区分大小写str_pad — 对字符串进行两侧的补白str_repeat — 对字符串进行重复组合str_replace — 匹配和替换字符串str_rot13 — 将字符串进行ROT13加密处理str_shuffle — 对一个字符串里面的字符进行随机排序str_split — 将一个字符串按照字符间距分割为一个数组str_word_count — 获取字符串里面的英文单词信息strcasecmp — 对字符串进行大小比较，不区分大小写strchr — 通过比较返回一个字符串的部分strstr()函数的别名strcmp — 对字符串进行大小比较strcoll – 根据本地设置对字符串进行大小比较strcspn — 返回字符连续非匹配长度的值strip_tags — 去除一个字符串里面的HTML和PHP代码stripcslashes — 反转义addcslashes()函数转义处理过的字符串stripos — 查找并返回首个匹配项的位置，匹配不区分大小写stripslashes — 反转义addslashes()函数转义处理过的字符串stristr — 通过比较返回一个字符串的部分，比较时不区分大小写strlen — 获取一个字符串的编码长度strnatcasecmp — 使用自然排序法对字符串进行大小比较，不区分大小写strnatcmp — 使用自然排序法对字符串进行大小比…

PHP中A与B两个位置间的距离(经纬度)
type: item
date: 2017-10-25T14:27:00+00:00
description: 在《PHP经典实例》书中看到非常有意思的一个代码实例、就是根据经纬度计算距离的代码、当但实际是有点误差的。误差大概在0.5%左右。function sphere_distance($lat1,$lon1,$lat2,$lon2,$radius=6378.135){ $rad=doubleval(M_PI/180.0); $lat1=doubleval($lat1)*$rad; $lon1=doubleval($lon1)*$rad; $lat2=doubleval($lat2)*$rad; $lon2=doubleval($lon2)*$rad; $theta=$lon2-$lon1; $dist=acos(sin($lat1) *sin($lat2)+cos($lat1)*cos($lat2)*cos($theta)); if($dist<0){$dist+=M_PI;} return $dist=$dist * $radius; } $lat1=39.735616; //纬度 $lon1=116.378685; //经度/ $lat2=47.72737363170936; $lon2=128.89125823975863; $dist=sphere_distance($lat1,$lon1,$lat2,$lon2); //$formatted=sprintf("%.2f",$dist*0.621); 英里 $formatted=sprintf("%.2f",$dist*0.621)*1.609344; //公里 var_dump($formatted);

PHP跨域访问的3种方法
type: item
date: 2017-09-29T14:40:00+00:00
description: file_get_contents$host = 'url'; $randomNumber=file_get_contents($host); echo $$randomNumber;升级版$host = 'http://dd.xw025.com/c.php?key=1&http=2&ip=3'; $opts = array( 'http'=>array( 'method'=>"GET", 'timeout'=>2, ) ); $res = @file_get_contents($host, false, stream_context_create($opts));Curl$host = 'url'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $host); // 返回结果 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 使用POST提交 curl_setopt($ch, CURLOPT_POST, 1); // POST参数 $str = array('a=1','b=2','c=3'); curl_setopt($ch, CURLOPT_POSTFIELDS, $str); // 结果 $res = curl_exec($ch); curl_close($ch);使用curl库，使用curl库之前，你可能需要查看一下php.ini，查看是否已经打开了curl扩展fopen?php $url="http://www.dnjs.net/"; $fp=fopen($url,'r'); while(!feof($fp)){ $result.=fgets($fp,1024); } echo" $result"; fclose($fp); ?>

PHP优秀函数集合
type: item
date: 2017-07-22T05:37:00+00:00
description: 检查是不是手机端/** * 检测是否是手机站 * @return bool */ function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } //此条摘自TPM智能切换模板引擎，适合TPM开发 if (isset($_SERVER['HTTP_CLIENT']) && 'PhoneClient' == $_SERVER['HTTP_CLIENT']) { return true; } //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息 if (isset($_SERVER['HTTP_VIA'])) { //找不到为flase,否则为true return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false; } //判断手机发送的客户端标志,兼容性有待提高 if (isset($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = array( 'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile','iPad','UCBrowser', 'MQQBrowser' ); //从HTTP_USER_AGENT中查找手机浏览器的关键字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { return true; } } //协议法，因为有可能不准确，放到最后判断 if (isset($_SERVER['HTTP_ACCEPT'])) { // 如果只支持wml并且不支持html那一定是移动设备 // 如果支持wml和html但是wml在html之前则是移动设备 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) { return true; } } return false; } 时间转换星期函数function CnTimeString(int $time) { $moth=date('Y年m月d日',$time); $week= date('w',$time); $m=date('i',$time); switch ($week){ case 1: $week='星期一'; break; case 2: $week='星期二'; break; case 3: $week='星期三'; break; case 4: $week='星期四'; break; case 5: $week='星期五'; break; case 6: $week='星期六'; break; case 0: $week='星期日'; break; } $H=(int) date('H',$time); if($H<5){$HH='凌晨'; }elseif($H<8){$HH='早上'; }elseif($H<11){$HH='上午'; }elseif($H<13){$HH="中午"; }elseif($H<18){$HH="下午";$H=$H-12; }elseif($H<=23){$HH="晚上";$H=$H-12;} $timeString=$moth."({$week})".$HH.$H.":".$m; return $timeString; }curl请求函数/…

PHP的mysqli函数操作数据库
type: item
date: 2017-06-19T02:29:00+00:00
description: 查询<?php //1. 连接数据库 $link = mysqli_connect("localhost","root","123456"); //2. 选择数据库 mysqli_select_db($link,"dongli"); //3. 设置字符集 mysqli_set_charset($link,"utf8"); //4. 定义sql语句，并发送执行 $sql = "select * from k_ke_lei left join k_ganyan on k_ganyan.g_id=k_ke_lei.le_id left join k_ke_status on k_ke_status.st_id=k_ke_lei.le_id"; $result = mysqli_query($link,$sql); // echo mysqli_num_rows($result);die; //14 //5. 解析结果集 //判断是否查询出数据,查询出来的数据是当前表的总条数 if(mysqli_num_rows($result)>0){ while($rows = mysqli_fetch_assoc($result)){ var_dump($rows); } // ***mysqli_fetch_assoc($result); //解析出来的结果是一个关联式的数组 // $rows = mysqli_fetch_row($result); //解析出来的结果是一个索引式数组 // $rows = mysqli_fetch_array($result); //解析出来的结果是一个索引式+关联式的数组 // $rows = mysqli_fetch_object($result);//解析出来的结果是一个对象 // var_dump($rows); } //6. 释放结果集，关闭数据库 mysqli_free_result($result); mysqli_close($link); ?>增删改<?php //1.连接数据库 $link = @mysqli_connect("localhost1","root","123456")or die("数据库连接失败！"); //2.选择数据库 mysqli_select_db($link,"dongli"); //3.设置字符集 mysqli_set_charset($link,"utf8"); //4.定义sql语句，并发送执行 $sql = "insert into stu1 (name,sex,age,job) values ('作红4','g',30,'PHP')"; mysqli_query($link,$sql); // var_dump($result); // echo mysqli_affected_rows($link); //1 影响了1行 //5.解析结果集 //判断是否发送成功 //判断的影响行数，如果大于0，插入成功，如果是-1，说明插入失败！！ // if(mysqli_affected_rows($link)>0){ // echo "插入成功！"; // } // echo mysqli_insert_id($link); //13 /* if(mysqli_insert_id($link)>0){ echo "插入成功！"; }else{ // 如果插入失败，可以将数据库中的错误信息在页面上显示 echo mysqli_error($link); //Duplicate entry '作红4' for key 'name' echo mysqli_errno($link); //1062 将报错时前面的错误号显示出来 echo "插入失败！"; } */ //6.释放结果集，关闭数据库 mysqli_close($link); ?>