首页
关于网站
Search
1
接码平台集合
3,340 阅读
2
v2ray一键安装脚本
3,254 阅读
3
自建 SS 节点教程
2,601 阅读
4
pbootcms中指定内容,循环调用
2,537 阅读
5
生成美国身份
1,976 阅读
网站SEO
外贸建站
Google Ads
PHP编程
前端技术
ThinkCore
人生随感
网络资源
记录本
第一天
第二天
第三天
第四天
第五天
外贸平台
亚马逊
Facebook
Linkedin
软件开发
登录
Search
标签搜索
动漫
动画
漫画
日本动漫
热血动漫
排名
php
动漫设计
半小时漫画中国哲学史
中华小子动漫
奇说妙语:20 个猜得到开头
海关
教育部通报教材插图问题 27人被问责
编程语言
电影
动漫下载器
秦时明月动漫官网
动漫小说
暧昧关系动漫
动漫美少女受辱禁图
Jacky Chen
累计撰写
543
篇文章
累计收到
172
条评论
首页
栏目
网站SEO
外贸建站
Google Ads
PHP编程
前端技术
ThinkCore
人生随感
网络资源
记录本
第一天
第二天
第三天
第四天
第五天
外贸平台
亚马逊
Facebook
Linkedin
软件开发
页面
关于网站
搜索到
16
篇与
php
的结果
2022-09-20
详解PHP中时间处理类Carbon常用方法的使用
详解PHP中时间处理类常用方法的使用 更新时间:2022年09月14日 09:59:43 作者:PHP开源社区 是php的日期处理类库,继承了PHP的类。本文为大家详细介绍了中常用的一些方法的使用,感兴趣的小伙伴可以了解一下 目录 1. 所有类似 () 这样的方法都依赖于::()。() 方法允许 实例被打印时以一种可读性更好的方式被打印出来。 <pre class="brush:php;">$dt = Carbon::create(1975, 12, 25, 14, 15, 16);var_dump($dt->toDateTimeString() == $dt); // bool(true) => uses __toString()echo $dt->toDateString(); // 1975-12-25echo $dt->toFormattedDateString(); // Dec 25, 1975echo $dt->toTimeString(); // 14:15:16echo $dt->toDateTimeString(); // 1975-12-25 14:15:16echo $dt->toDayDateTimeString(); // Thu, Dec 25, 1975 2:15 PM// ... of course format() is still availableecho $dt->format('l jS \of F Y h:i:s A'); // Thursday 25th of December 1975 02:15:16 PM</pre> 另外可以默认设置 () 方法所要显示的时间日期格式。 <pre class="brush:php;">Carbon::setToStringFormat('jS of F, Y g:i:s a');echo $dt; // 25th of December, 1975 2:15:16 pmCarbon::resetToStringFormat();echo $dt; // 1975-12-25 14:15:16</pre> 如果需要设定特定的语言显示,请参考 部分。 2. 下面是对 类提供的通用格式的一些封装。 <pre class="brush:php;">$dt = Carbon::now();// $dt->toAtomString() is the same as $dt->format(DateTime::ATOM);echo $dt->toAtomString(); // 1975-12-25T14:15:16-05:00echo $dt->toCookieString(); // Thursday, 25-Dec-1975 14:15:16 ESTecho $dt->toIso8601String(); // 1975-12-25T14:15:16-0500echo $dt->toRfc822String(); // Thu, 25 Dec 75 14:15:16 -0500echo $dt->toRfc850String(); // Thursday, 25-Dec-75 14:15:16 ESTecho $dt->toRfc1036String(); // Thu, 25 Dec 75 14:15:16 -0500echo $dt->toRfc1123String(); // Thu, 25 Dec 1975 14:15:16 -0500echo $dt->toRfc2822String(); // Thu, 25 Dec 1975 14:15:16 -0500echo $dt->toRfc3339String(); // 1975-12-25T14:15:16-05:00echo $dt->toRssString(); // Thu, 25 Dec 1975 14:15:16 -0500echo $dt->toW3cString(); // 1975-12-25T14:15:16-05:00</pre> 3. 通过以下方式可以对两个 实例进行简单的比较。牢记这些比较都是在UTC时区下完成的。 <pre class="brush:php;">echo Carbon::now()->tzName; // America/Toronto$first = Carbon::create(2012, 9, 5, 23, 26, 11);$second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver');echo $first->toDateTimeString(); // 2012-09-05 23:26:11echo $first->tzName; // America/Torontoecho $second->toDateTimeString(); // 2012-09-05 20:26:11echo $second->tzName; // America/Vancouvervar_dump($first->eq($second)); // bool(true)var_dump($first->ne($second)); // bool(false)var_dump($first->gt($second)); // bool(false)var_dump($first->gte($second)); // bool(true)var_dump($first->lt($second)); // bool(false)var_dump($first->lte($second)); // bool(true)$first->setDateTime(2012, 1, 1, 0, 0, 0);$second->setDateTime(2012, 1, 1, 0, 0, 0); // Remember tz is 'America/Vancouver'var_dump($first->eq($second)); // bool(false)var_dump($first->ne($second)); // bool(true)var_dump($first->gt($second)); // bool(false)var_dump($first->gte($second)); // bool(false)var_dump($first->lt($second)); // bool(true)var_dump($first->lte($second)); // bool(true)</pre> 如果要判断当前实例对应的时间,是否在其他两个实例对应的时间之间,可以用 () 方法。如果提供了第三个参数,并且为 true,将会进行 >= 和 和 < 的操作。该参数默认是 true 。 <pre class="brush:php;">$first = Carbon::create(2012, 9, 5, 1);$second = Carbon::create(2012, 9, 5, 5);var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second)); // bool(true)var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second)); // bool(true)var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false)); // bool(false)</pre> 还记得 min() 和 max() 吗?min() 将会返回两个实例中时间较早的实例,max() 返回时间较晚的那个。如果没有提供给 min() 或 max() 任何参数,将会拿当前时间和调用该方法的实例进行比较。 <pre class="brush:php;">$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);echo $dt1->min($dt2); // 2012-01-01 00:00:00$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);echo $dt1->max($dt2); // 2014-01-30 00:00:00// now is the default param$dt1 = Carbon::create(2000, 1, 1, 0, 0, 0);echo $dt1->max(); // 2016-06-24 15:18:34</pre> 提供了一些见名知意的辅助方法去处理大部分用到的场景。需要执行比较操作的方法都会与当前时区的当前时间进行比较。 <pre class="brush:php;">$dt = Carbon::now();$dt->isWeekday();$dt->isWeekend();$dt->isYesterday();$dt->isToday();$dt->isTomorrow();$dt->isFuture();$dt->isPast();$dt->isLeapYear();$dt->isSameDay(Carbon::now());$born = Carbon::createFromDate(1987, 4, 23);$noCake = Carbon::createFromDate(2014, 9, 26);$yesCake = Carbon::createFromDate(2014, 4, 23);$overTheHill = Carbon::now()->subYears(50);var_dump($born->isBirthday($noCake)); // bool(false)var_dump($born->isBirthday($yesCake)); // bool(true)var_dump($overTheHill->isBirthday()); // bool(true) -> default compare it to today!</pre> 4. and 默认的类提供了一对方便增加和减少时间的方法。有 (),add() 和 sub() 。() 方法接受一个标准的 data/time 字符串,该方法会对字符串进行解析,当牵扯到 add() 和 sub() 时会隐式调用类进行处理。用链式调用的方式进行操作,代码将会更加的清晰和易读。当然,由于继承关系这并不会影响你使用底层的方法进行操作。 <pre class="brush:php;">$dt = Carbon::create(2012, 1, 31, 0);echo $dt->toDateTimeString(); // 2012-01-31 00:00:00echo $dt->addYears(5); // 2017-01-31 00:00:00echo $dt->addYear(); // 2018-01-31 00:00:00echo $dt->subYear(); // 2017-01-31 00:00:00echo $dt->subYears(5); // 2012-01-31 00:00:00echo $dt->addMonths(60); // 2017-01-31 00:00:00echo $dt->addMonth(); // 2017-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wrapsecho $dt->subMonth(); // 2017-02-03 00:00:00echo $dt->subMonths(60); // 2012-02-03 00:00:00echo $dt->addDays(29); // 2012-03-03 00:00:00echo $dt->addDay(); // 2012-03-04 00:00:00echo $dt->subDay(); // 2012-03-03 00:00:00echo $dt->subDays(29); // 2012-02-03 00:00:00echo $dt->addWeekdays(4); // 2012-02-09 00:00:00echo $dt->addWeekday(); // 2012-02-10 00:00:00echo $dt->subWeekday(); // 2012-02-09 00:00:00echo $dt->subWeekdays(4); // 2012-02-03 00:00:00echo $dt->addWeeks(3); // 2012-02-24 00:00:00echo $dt->addWeek(); // 2012-03-02 00:00:00echo $dt->subWeek(); // 2012-02-24 00:00:00echo $dt->subWeeks(3); // 2012-02-03 00:00:00echo $dt->addHours(24); // 2012-02-04 00:00:00echo $dt->addHour(); // 2012-02-04 01:00:00echo $dt->subHour(); // 2012-02-04 00:00:00echo $dt->subHours(24); // 2012-02-03 00:00:00echo $dt->addMinutes(61); // 2012-02-03 01:01:00echo $dt->addMinute(); // 2012-02-03 01:02:00echo $dt->subMinute(); // 2012-02-03 01:01:00echo $dt->subMinutes(61); // 2012-02-03 00:00:00echo $dt->addSeconds(61); // 2012-02-03 00:01:01echo $dt->addSecond(); // 2012-02-03 00:01:02echo $dt->subSecond(); // 2012-02-03 00:01:01echo $dt->subSeconds(61); // 2012-02-03 00:00:00</pre> 当然你也可以传递负值到()方法,实际这正是()方法所实现的功能。 5. 以下方法总是返回两个实例之间的时间差。与基类中的 diff() 方法不同的是,diff() 方法会通过实例将61秒转化成1分1秒来返回。下边的这些方法第一个参数是将会用来比较的 实例,默认为 now() 方法创建的当前时间实例。第二个参数也是可选的,指明了你是否需要返回一个比较结果的绝对值,默认为 true,当第二个参数为 false,并且用于比较的实例时间早于被比较的实例时,返回负数。所有的比较操作都在UTC时区下完成。 <pre class="brush:php;">// Carbon::diffInYears(Carbon $dt = null, $abs = true)echo Carbon::now('America/Vancouver')->diffInSeconds(Carbon::now('Europe/London')); // 0$dtOttawa = Carbon::createFromDate(2000, 1, 1, 'America/Toronto');$dtVancouver = Carbon::createFromDate(2000, 1, 1, 'America/Vancouver');echo $dtOttawa->diffInHours($dtVancouver); // 3echo $dtOttawa->diffInHours($dtVancouver, false); // 3echo $dtVancouver->diffInHours($dtOttawa, false); // -3$dt = Carbon::create(2012, 1, 31, 0);echo $dt->diffInDays($dt->copy()->addMonth()); // 31echo $dt->diffInDays($dt->copy()->subMonth(), false); // -31$dt = Carbon::create(2012, 4, 30, 0);echo $dt->diffInDays($dt->copy()->addMonth()); // 30echo $dt->diffInDays($dt->copy()->addWeek()); // 7$dt = Carbon::create(2012, 1, 1, 0);echo $dt->diffInMinutes($dt->copy()->addSeconds(59)); // 0echo $dt->diffInMinutes($dt->copy()->addSeconds(60)); // 1echo $dt->diffInMinutes($dt->copy()->addSeconds(119)); // 1echo $dt->diffInMinutes($dt->copy()->addSeconds(120)); // 2echo $dt->addSeconds(120)->secondsSinceMidnight(); // 120</pre> 一些特殊的过滤方法,像 () 、() 和 () ,可以帮助你过滤时间差中的 days 、hour 或者一个自定义的时间间隔。下边是统计两个实例之间的周末天数。 <pre class="brush:php;">$dt = Carbon::create(2014, 1, 1);$dt2 = Carbon::create(2014, 12, 31);$daysForExtraCoding = $dt->diffInDaysFiltered(function(Carbon $date) { return $date->isWeekend();}, $dt2);echo $daysForExtraCoding; // 104$dt = Carbon::create(2014, 1, 1)->startOfDay();$dt2 = $dt->copy()->endOfDay();$littleHandRotations = $dt->diffFiltered(CarbonInterval::minute(), function(Carbon $date) { return $date->minute === 0;}, $dt2);echo $littleHandRotations; // 24// others that are defined// diffInYears(), diffInMonths(), diffInWeeks()// diffInDays(), diffInWeekdays(), diffInWeekendDays()// diffInHours(), diffInMinutes(), diffInSeconds()// secondsSinceMidnight(), secondsUntilEndOfDay()</pre> 6. for 对于人们来说,一月前比30天前更加易与理解。这是一个常见的方法在许多日期处理类库中,所以他想也应该把这个加进来。这里把一个月看做四周,这些方法需要一个可选的 实例作为参数来进行比较,默认为当前时间的实例。 这些方法会在两个时间差值后增加一写描述,可能类似下边这四种: When a value in the past to now: When a value in the to now: When a value in the past to value: When a value in the to value: 你也可以传递第二个参数去掉类似 ago,from now 这种修饰符,类似这样的用法 ( $other, true) 等。 <pre class="brush:php;">// The most typical usage is for comments// The instance is the date the comment was created and its being compared to default now()echo Carbon::now()->subDays(5)->diffForHumans(); // 5 days agoecho Carbon::now()->diffForHumans(Carbon::now()->subYear()); // 1 year after$dt = Carbon::createFromDate(2011, 8, 1);echo $dt->diffForHumans($dt->copy()->addMonth()); // 1 month beforeecho $dt->diffForHumans($dt->copy()->subMonth()); // 1 month afterecho Carbon::now()->addSeconds(5)->diffForHumans(); // 5 seconds from nowecho Carbon::now()->subDays(24)->diffForHumans(); // 3 weeks agoecho Carbon::now()->subDays(24)->diffForHumans(null, true); // 3 weeks</pre> 你也通过在 () 被调用前,使用 ::(‘fr’) 来改变语言设置。详细请参考 部分。 7. .这些方法组对修改当前实例很有帮助。你会注意到 (),next(),和 () 方法将会设置时间为 00:00:00,另外 () 方法将会设置时间为 23:59:59 。 <pre class="brush:php;">$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->startOfDay(); // 2012-01-31 00:00:00$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->endOfDay(); // 2012-01-31 23:59:59$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->startOfMonth(); // 2012-01-01 00:00:00$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->endOfMonth(); // 2012-01-31 23:59:59$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->startOfYear(); // 2012-01-01 00:00:00$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->endOfYear(); // 2012-12-31 23:59:59$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->startOfDecade(); // 2010-01-01 00:00:00$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->endOfDecade(); // 2019-12-31 23:59:59$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->startOfCentury(); // 2000-01-01 00:00:00$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->endOfCentury(); // 2099-12-31 23:59:59$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->startOfWeek(); // 2012-01-30 00:00:00var_dump($dt->dayOfWeek == Carbon::MONDAY); // bool(true) : ISO8601 week starts on Monday$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->endOfWeek(); // 2012-02-05 23:59:59var_dump($dt->dayOfWeek == Carbon::SUNDAY); // bool(true) : ISO8601 week ends on Sunday$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->next(Carbon::WEDNESDAY); // 2012-02-01 00:00:00var_dump($dt->dayOfWeek == Carbon::WEDNESDAY); // bool(true)$dt = Carbon::create(2012, 1, 1, 12, 0, 0);echo $dt->next(); // 2012-01-08 00:00:00$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->previous(Carbon::WEDNESDAY); // 2012-01-25 00:00:00var_dump($dt->dayOfWeek == Carbon::WEDNESDAY); // bool(true)$dt = Carbon::create(2012, 1, 1, 12, 0, 0);echo $dt->previous(); // 2011-12-25 00:00:00$start = Carbon::create(2014, 1, 1, 0, 0, 0);$end = Carbon::create(2014, 1, 30, 0, 0, 0);echo $start->average($end); // 2014-01-15 12:00:00// others that are defined that are similar// firstOfMonth(), lastOfMonth(), nthOfMonth()// firstOfQuarter(), lastOfQuarter(), nthOfQuarter()// firstOfYear(), lastOfYear(), nthOfYear()</pre> 8. 中定义了以下常量。 <pre class="brush:php;">// These getters specifically return integers, ie intval()var_dump(Carbon::SUNDAY); // int(0)var_dump(Carbon::MONDAY); // int(1)var_dump(Carbon::TUESDAY); // int(2)var_dump(Carbon::WEDNESDAY); // int(3)var_dump(Carbon::THURSDAY); // int(4)var_dump(Carbon::FRIDAY); // int(5)var_dump(Carbon::SATURDAY); // int(6)var_dump(Carbon::YEARS_PER_CENTURY); // int(100)var_dump(Carbon::YEARS_PER_DECADE); // int(10)var_dump(Carbon::MONTHS_PER_YEAR); // int(12)var_dump(Carbon::WEEKS_PER_YEAR); // int(52)var_dump(Carbon::DAYS_PER_WEEK); // int(7)var_dump(Carbon::HOURS_PER_DAY); // int(24)var_dump(Carbon::MINUTES_PER_HOUR); // int(60)var_dump(Carbon::SECONDS_PER_MINUTE); // int(60)</pre> 还有 <pre class="brush:php;">$dt = Carbon::createFromDate(2012, 10, 6);if ($dt->dayOfWeek === Carbon::SATURDAY) {echo 'Place bets on Ottawa Senators Winning!'; re> 9. 类继承了PHP 的类。<p><pre class="brush:php;">
2022年09月20日
80 阅读
0 评论
0 点赞
2022-09-20
一文详解PHP连接MySQL数据库的三种方式
一文详解PHP连接MySQL数据库的三种方式 更新时间:2022年05月23日 14:40:30 作者:PHP开源社区 PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展、PHP的扩展、PHP数据对象(PDO)。本文将详解这三种方式的示例代码,需要的可以参考一下 目录 PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的扩展 、PHP数据对象(PDO)。 1.MySQL扩展 PHP 的 MySQL 扩展是设计开发允许 PHP 应用与 MySQL 数据库交互的早期扩展。MySQL 扩展提供了一个面向过程的接口,由于不支持后期MySQL服务端提供的一些特性。且太古老,又不安全,所以已被后来的完全取代; 使用方式如下 <pre class="brush:a href='https://www.inncms.com/247.html' title='一文搞懂PHP中的抽象类和接口' target='_blank'php/a;"> //自 PHP 5.5.0 起已废弃。$[mysql][4]_conf = array( 'host' => '127.0.0.1:3306', 'db' => 'test', 'db_user' => 'root', 'db_pwd' => 'root', ); $mysql_conn = @mysql_connect($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']); if (!$mysql_conn) { die("无法连接到数据库:\n" . mysql_error());//诊断连接错误 } mysql_query("set names 'utf8'");//编码转化为UTF-8 //判断连接的数据库是否存在 $select_db = mysql_select_db($mysql_conf['db']); if (!$select_db) { die("无法连接到数据库:\n" . mysql_error()); } $sql = "select * from user;"; $res = mysql_query($sql); if (!$res) { die("could get the res:\n" . mysql_error()); } while ($row = mysql_fetch_assoc($res)) { print_r($row); } mysql_close($mysql_conn);</pre> 2.扩展 MySQL 增强扩展,可以用于使用 MySQL 中新的高级特性。其特点为:面向对象接口 、语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。缺点是只支持mysql数据库。 <pre class="brush:php;">//PHP与Mysqli扩展,面向过程、对象 $mysql_conf = array( 'host' => '127.0.0.1:3306', 'db' => 'test', 'db_user' => 'root', 'db_pwd' => 'joshua317', ); $mysqli = @new mysqli($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);<p>if ($mysqli->connect_errno) { die("无法连接到数据库:\n" . $mysqli->connect_error);//诊断连接错误} $mysqli->query("set names 'utf8';");//编码转化utf8 $select_db = $mysqli->select_db($mysql_conf['db']); if (!$select_db) { die("could not connect to the db:\n" . $mysqli->error);}$sql = "select uid from user where name = 'joshua';"; $res = $mysqli->query($sql); if (!$res) { die("sql error:\n" . $mysqli->error);} while ($row = $res->fetch_assoc()) { var_dump($row); } $res->free(); $mysqli->close();</pre></p> 3.PDO扩展 PDO 是 PHP Data 的缩写,是PHP应用中的一个数据库抽象层规范。PDO 提供的API接口不用去关心具体要连接的数据库服务器系统类型。如果你使用 PDO 的 API ,可以在任何需要的时候无缝切换数据库服务器,比如从 到 MySQL 。 同样,其也解决了 sql 注入问题,有很好的安全性。不过他也有缺点,某些多语句执行查询不支持(不过该情况很少)。 <pre class="brush:php;">//PHP与PDO扩展,面向过程、对象 $mysql_conf = array( 'host' => '127.0.0.1:3306', 'db' => 'test', 'db_user' => 'root', 'db_pwd' => 'joshua317', );$pdo = new PDO("mysql:host=" . $mysql_conf['host'] . ";dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象 $pdo->exec("set names 'utf8'");$sql = "select * from user where name = ?"; $stmt = $pdo->prepare($sql); $stmt->bindValue(1, 'joshua', PDO::PARAM_STR); $rs = $stmt->execute(); if ($rs) { // PDO::FETCH_ASSOC 关联数组形式 // PDO::FETCH_NUM 数字索引数组形式 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { var_dump($row); }}$pdo = null;//关闭连接</pre> 知识点补充 PHP的MySQL扩展是设计开发允许php应用与MySQL数据库交互的早期扩展。MySQL扩展提供了一个面向过程的接口,并且是针对.1.3或者更早版本设计的。因此这个扩展虽然可以与.1.3或更新的数据库服务端进行交互,但并不支持后期MySQL服务端提供的一些特性。由于太古老,又不安全,所以已被后来的完全取代; PHP的扩展,我们有时称之为MySQL增强扩展,可以用于使用 .1.3或更新版本中新的高级特性。其特点为:面向对象接口 、语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。不过其也有缺点,就是只支持mysql数据库。如果你要是不操作其他的数据库,这无疑是最好的选择。 PDO是PHP Data 的缩写,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要连接的数据库服务器系统类型,也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从 到MySQL,仅仅需要修改很少的PHP代码。其功能类似于JDBC、ODBC、DBI之类接口。同样,其也解决了sql注入问题,有很好的安全性。不过他也有缺点,某些多语句执行查询不支持(不过该情况很少)。 到此这篇关于一文详解PHP连接MySQL数据库的三种方式的文章就介绍到这了,更多相关PHP连接MySQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
2022年09月20日
71 阅读
0 评论
0 点赞
2022-09-18
一文搞懂PHP中的抽象类和接口
一文搞懂PHP中的抽象类和接口 更新时间:2022年05月25日 10:59:38 作者:PHP开源社区 这篇文章主要介绍了PHP中抽象类和接口的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 目录 一.抽象类1.定义 用 关键字来修饰一个类时,这个类就叫抽象类. 用 关键字来修饰一个方法时,这个方法就是抽象方法. 2.应用场景 在实际开发中,我们可能有这样一种类,是其它类的父类,但是它本身并不需要实例化,主要用途是用于让子类来继承(规定子类),这样可以到达代码复用. 同时利于项目设计者来设计类。 3.入门代码<p><pre class="brush:a href='https://www.inncms.com/245.html' title='如何基于PHP实现微信小程序pdf文件的预览功能' target='_blank'php/a;">
2022年09月18日
53 阅读
0 评论
0 点赞
2022-09-18
PHP常见方法封装总结
PHP常见方法封装总结 更新时间:2022年05月26日 09:50:03 作者:PHP开源社区 这篇文章主要为大家介绍了PHP中常见的几个方法封装,文中的示例代码讲讲详细,对我们学习或工作有一定的参考价值,感兴趣的可以了解一下 目录 1.get请求 <pre class="brush:a href='https://www.inncms.com/244.html' title='PHP实现常见排序算法的示例代码' target='_blank'php/a;">function get_curl($url, $timeout = 5) {$ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true ); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $result = curl_exec( $ch ); curl_close($ch); return $result; re> 2.post请求 <pre class="brush:php;">function post_curl($url, $data, $timeout = 5) {$ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true ); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $result = curl_exec( $ch ); curl_close($ch); return $result; re> 3.随机字符串 <pre class="brush:php;">function random_str($len=10, $type=1){switch($type){ case 2: $chars='0123456789'; break; case 3: $chars='abcdefghijklmnopqrstuvwxyz'; break; case 4: $chars='ABDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 5: $chars='abcdefghijklmnopqrstuvwxyzABDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 6: $chars='abcdefghijklmnopqrstuvwxyz0123456789'; break; default: $chars='abcdefghijklmnopqrstuvwxyzABDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; break; } $str = ''; for ( $i = 0; $i $v){ $data[$key] = $this->check_data($v); } }else{ $data = trim($data); $data = strip_tags($data); $data = htmlspecialchars($data); $data = addslashes($data); } return $data; re> 6.重定向 <pre class="brush:php;">function redirect($url = 'https://blog.csdn.net/weixin_41635750'){if (!headers_sent()) { header("Location: {$url}"); exit(); }else{ $str = ""; exit($str); } re> 7.获取客户端ip <pre class="brush:php;">function get_real_ip() {if(@$_SERVER["HTTP_ALI_CDN_REAL_IP"]){ $ip = $_SERVER["HTTP_ALI_CDN_REAL_IP"]; } elseif (@$_SERVER["HTTP_X_FORWARDED_FOR"] ?: false) { $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; $ips = explode(',', $ip); $ip = $ips[0]; } elseif (@$_SERVER["HTTP_CDN_SRC_IP"] ?: false) { $ip = $_SERVER["HTTP_CDN_SRC_IP"]; } elseif (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('HTTP_X_FORWARDED'); } elseif (getenv('HTTP_FORWARDED_FOR')) { $ip = getenv('HTTP_FORWARDED_FOR'); } elseif (getenv('HTTP_FORWARDED')) { $ip = getenv('HTTP_FORWARDED'); } else { $ip = $_SERVER['REMOTE_ADDR']; } $ip = str_replace(array('::ffff:', '[', ']'), array('', '', ''), $ip); return $ip; re> 到此这篇关于PHP常见方法封装总结的文章就介绍到这了,更多相关PHP方法封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
2022年09月18日
58 阅读
0 评论
0 点赞
2022-09-17
PHP实现常见排序算法的示例代码
PHP实现常见排序算法的示例代码 更新时间:2022年06月06日 16:52:07 作者:PHP开源社区 这篇文章主要介绍了PHP实现常见排序算法(冒泡排序、选择排序、快速排序和插入排序)的示例代码,感兴趣的小伙伴可以跟随小编一起学习一下 目录 1、冒泡排序 两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小。 <pre class="brush:a href='https://www.inncms.com/240.html' title='详解PHP反序列化漏洞的原理及示例' target='_blank'php/a;">function maopaoSort ($list){$len = count($list); for ($i = 0; $i < $len - 1; $i++) { for ($j = 0; $j < $len - $i - 1; $j++) { if ($list[$j] > $list[$j + 1]) { $tmp = $list[$j]; $list[$j] = $list[$j + 1]; $list[$j + 1] = $tmp; } } } return $list; re> 2、选择排序 选定一个作为基本值,剩下的和这个比较,然后调换位置。 <pre class="brush:php;">function xuanzeSort ($list){$len = count($list); for ($i = 0; $i < $len - 1; $i++) { $pos = $i; for ($j = $i + 1; $j < $len; $j++) { if ($list[$pos] > $list[$j]) { $pos = $j; } } if ($pos != $i) { $tmp = $list[$pos]; $list[$pos] = $list[$i]; $list[$i] = $tmp; } } return $list; re> 3、快速排序 原理就是拿出一个标尺值,然后分为左右两个数组,分别对比 <pre class="brush:php;">function kuaisuSort ($list){$len = count($list); if ($len $list[$i]) { $leftList[] = $list[$i]; } else { $rightList[] = $list[$i]; } } //递归分别再处理左右两边的数组 $leftList = kuaisuSort($leftList); $rightList = kuaisuSort($rightList); return array_merge($leftList, [$base], $rightList); re> 4、插入排序 假设前面的数都是排好顺序的,要把第n个数插入到有序里 <pre class="brush:php;">function charuSort ($list){$len = count($list); for ($i = 1; $i < $len; $i++) { $tmp = $list[$i];//获取对比元素 for ($j = $i - 1; $j > 0; $j--) { if ($list[$j] > $tmp) { $list[$j + 1] = $list[$j]; $list[$j] = $tmp; } else { break; } } } return $list; re> 补充 当然PHP还能实现其他的常见排序算法,如归并排序、希尔排序、堆排序等 归并排序 <pre class="brush:php;">/**归并排序*@param array $lists@return array*/function merge_sort(array $lists) { $n = count($lists); if ($n 0) { for ($gi = 0; $gi < $gap; $gi++) { for ($i = $gi; $i < $n; $i += $gap) { $key = $lists[$i]; for ($j = $i - $gap; $j >= 0 && $lists[$j] > $key; $j -= $gap) { $lists[$j + $gap] = $lists[$j]; $lists[$j] = $key; } } } $gap = intval($gap / $step); } return $lists; }</pre> 堆排序 <pre class="brush:php;">/**堆排序*@param array $lists@return array*/function heap_sort(array $lists) { $n = count($lists); build_heap($lists); while (--$n) { $val = $lists[0]; $lists[0] = $lists[$n]; $lists[$n] = $val; heap_adjust($lists, 0, $n); //echo "sort: " . $n . "\t" . implode(', ', $lists) . PHP_EOL; } return $lists; } function build_heap(array &$lists) { $n = count($lists) - 1; for ($i = floor(($n - 1) / 2); $i >= 0; $i--) { heap_adjust($lists, $i, $n + 1); //echo "build: " . $i . "\t" . implode(', ', $lists) . PHP_EOL; } //echo "build ok: " . implode(', ', $lists) . PHP_EOL; } function heap_adjust(array &$lists, $i, $num) { if ($i > $num / 2) { return; } $key = $i; $leftChild = $i * 2 + 1; $rightChild = $i * 2 + 2;if ($leftChild < $num && $lists[$leftChild] > $lists[$key]) { $key = $leftChild; } if ($rightChild < $num && $lists[$rightChild] > $lists[$key]) { $key = $rightChild; } if ($key != $i) { $val = $lists[$i]; $lists[$i] = $lists[$key]; $lists[$key] = $val; heap_adjust($lists, $key, $num); } }</pre> 到此这篇关于PHP实现常见排序算法的示例代码的文章就介绍到这了,更多相关PHP排序算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
2022年09月17日
58 阅读
0 评论
0 点赞
1
2
...
4