PHP代码审计-编程基础
1.变量与数据类型
变量
变量,在编程语言中是最基础的概念,其意思为一种可变化的量。可根据你所需将其赋值的量。
变量必须以 $ 美元符号开始
变量不能使用数字字符开头
变量开头可以下划线 _ 开始
变量名不能是PHP常用的关键字
在PHP中对变量大小写敏感,$a 与 $A 是两个变量
<?php
$a=1;
$b="14514";
$c=123455;
echo $a;
echo '</br>';
echo $b;
echo '</br>';
echo $a+$b;
echo'</br>';
$e=$a+$c;
echo $e;
echo'</br>';
$e=$a+$b;
echo $e;
?>
->
1
14514
14515
123456
14515
在上面的代码中,我们可以看到;我们将1赋值给变量a其数据类型是一个数字型,然后将为字符型的14514赋值给变量b,然后将数字型的123455赋值给变量c,然后将其输出 ,可以看到分别 echo了变量a和b;而后我们进行了运算,$a+$b将其输出出来,而后我们可以看到其声明了一个变量e,将其变量a和b运算后的值放到了变量e中;此时的过程为,将$a+$b的内存值在进行数值运算后将其存放到一个新开放的地址$e中;
php与python的不同:如果字符型与数字型进行运算,php都以数字型进行运算造成结果为14515而python则相反变为114154
数据类型
1.四种标量类型
- 布尔型(boolen)
- 整型(integer)
- 浮点型(float)
- 字符串(string)
2.两种复合类型
- 数组(array)
- 对象(object)
3.两种特殊类型:
- 资源(resource)
- Null
布尔型
其为真和假 ,即TrueorFalse。在php中都可以将任何类型的值转换为真或假。例如:00.0""为Flase,其他如-1,1,0.1为True等等
<?php
$a = True;
if($a==1){
echo "老将军背上插满flag";
}
?>
-> 老将军背上插满flag
整型(integer)
四种标量类型之一。其数据类型只能为整数-正整数或负整数。
其区间参考下面链接
https://www.php.net/manual/zh/language.types.integer.php
如果给定的数值超出最大范围,叫做整数溢出,会被当做浮点型处理。
浮点型(float)
四种标量类型之一。它是有小数位的,并且精度会比整数大的多。
具体精度可看:
https://www.php.net/manual/zh/language.types.float.php
字符串(string)
四种标量类型之一。字符串,即连续的字符序列,可以是数字,字母或符号
- 单引号'
$a='03857';
- 双引号"
$b="hello world";
- 定界符<<<
定界符用于定义格式化的大文本,其输出格式会按照你在定界符中所敲打的形式输出。
<<<str
格式化文本
str;
备注:定界符 开头的声明和结尾必须一样,结束的标识符必须在新的一行开头,并用;结束。
双引号与单引号定义字符的区别:
在单双引号中包含变量名时,双引号会将其变量的值输出,而单引号只会把它当做普通的字符输出。
在PHP中,有个函数,即- var_dump(变量名)可以查看数据类型。
<?php
var_dump(1);
echo '</br>';
var_dump('1');
echo '</br>';
var_dump(1.0);
echo '</br>';
var_dump(TRUE);
?>
-->
int(1)
string(1) "1"
string(3) "1.0"
bool(true)
常量
常量在脚本中是初始化的值,不会变的值。一般在程序中定义了常量之后,在整个程序中这个值都是固定有效的。
自定义常量
define(string constant_name, mixed value, case_sensitive=true)
参数(string constant_name):必选参数,常量名称。
参数(mixed value):必选参数,常量的值。
参数(case_sensitive=true):可选参数,指定是否大小写敏感,true为不敏感。
获取常量值
1、constant(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回正常值,如果失败,则提示错误信息(常量没有被定义)
2、defined(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回true,如果失败,返回false
运算符与表达式
运算符
运算符,是对常量,变量或数据进行计算的符号。常见的如 +,-,*,/;
算术运算符
字符串运算符
赋值运算符
比较运算符
条件运算符
递增或递减运算符
位运算符
逻辑运算符
举个例子:
算术运算符:就是常见的 加,减,乘,除,取余 ,所使用的的符号为 +,-,*,/,%
字符串运算符:就是对字符串进行基本操作,比如,使用英文句号 . ,是将两个或多个字符串连接起来形成一个新的字符串。
比较运算符:就是对变量或表达式的值进行大小,真假的比较,根据其比较返回true或者false。
逻辑运算符
&&或and ($a && $b)逻辑与,当两者都为真时,结果为真
||或or ($a || $b)逻辑或,但两者其中一者为真的时候,结果为真
!:逻辑非 (!$a)是个英文的感叹号,当$a为假时,结果为真
xor:逻辑异或($a xor $b),当$a,$b为一真一假时,结果为真
更多运算符符号,以及使用方法,还有他们的运算优先级可以参考此条
https://www.runoob.com/php/php-operators.html
表达式
表达式,是PHP语言的基本元素,它是将运算符和操作数连接起来的式子成为表达式,听起来很绕,其实$a=7089,这个赋值操作就是最简单的表达式,还有上面逻辑运算符两者比较,也是表达式。
条件判断语句
执行程序时一般的结果都为条件成功与否,是否执行。此时我们会将一些条件进行搭配条件语句
if
if...else
if...elseif....else
switch...case
if
if语句,其为直接判断语句,判断条件是否成立,如成立,执行语句,不成立不执行此段程序,继续执行下面条件。
<?php
$a=-1;
$b=-1;
if($a*$b)
{
echo '负负得正';
}
?>
-->负负得正
在此中,通过算术运算符将两个变量进行了运算,在if判断中结果为1其结果为True所以执行;
- if...esle
if...esle此语句,如果if语句判断没有成功,跳过if的内容然后执行else内的语句;
<?php
$day=-1;
if(day==4){
echo "今天是疯狂星期四";
}else{
echo "今天又是努力的一天";
}
?>
-->今天又是努力的一天
此处使用到了==两个等号,也就是比较运算符。在if条件中进行判断数值是否相等。成功则执行if的语句,不成功则执行else的语句
- if...elseif....else
此语句在上一条语句的基础上,if语句如果执行失败,将再次判断一个esleif语句,执行效果与if同效力
if (条件)
{
if 条件成立时执行的代码;
}
elseif (条件)
{
elseif 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
如果当前时间小于 10,下面的实例将输出 "Have a good morning!",如果当前时间不小于 10 且小于 20,则输出 "Have a good day!",否则输出 "Have a good night!"
<?php
$t=date("H");
if ($t<"10")
{
echo "Have a good morning!";
}
elseif ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
-->Have a good day!
- switch...case
在switch判断语句,如果此语句判断成功的话将会执行此语句,对应case内的,然后如果case语句内有break将会停止执行;进入下一段程序
<?php
switch (n)
{
case label1:
如果 n=label1,此处代码将执行;
break;
case label2:
如果 n=label2,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>
举个例子
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜欢的颜色是红色!";
break;
case "blue":
echo "你喜欢的颜色是蓝色!";
break;
case "green":
echo "你喜欢的颜色是绿色!";
break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>
-->你喜欢的颜色是红色!
循环语句
什么是循环?在满足一个条件的情况下,反复执行这个动作。
在PHP语言中有四种循环结构,分别是:while循环,do...while循环,for循环,foreach循环。
- while循环
同if效果,但是此会执行循环。if仅执行一次判断,while会在语句执行后再次执行判断,直至条件完成除非你写了一个无限的循环……
while (条件)
{
要执行的代码;
}
下面的实例首先设置变量 i 的值为 1 ($i=1;);然后,只要 i 小于或者等于 5,while 循环将继续运行。循环每运行一次,i 就会递增 1:
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
?>
</body>
</html>
-->
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5
- do...while循环
do...while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环
do
{
要执行的代码;
}
while (条件);
下面的实例首先设置变量 i 的值为 1 ($i=1;)。
然后,开始 do...while 循环。循环将变量 i 的值递增 1,然后输出。先检查条件(i 小于或者等于 5),只要 i 小于或者等于 5,循环将继续运行:
<html>
<body>
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br>";
}
while ($i<=5);
?>
</body>
</html>
-->
The number is 2
The number is 3
The number is 4
The number is 5
The number is 6
for循环
指定执行条件,然后反复执行区域代码
语法
for (初始值; 条件; 增量)
{
要执行的代码;
}
下面的实例定义一个初始值为 i=1 的循环。只要变量 i 小于或者等于 5,循环将继续运行。循环每运行一次,变量 i 就会递增 1:
<?php
for ($i=1; $i<=5; $i++)
{
echo "数字为 " . $i . PHP_EOL;
}
?>
--->
数字为 1
数字为 2
数字为 3
数字为 4
数字为 5
foreach循环
foreach 循环用于遍历数组
foreach ($array as $value)
{
要执行代码;
}
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值
foreach ($array as $key => $value)
{
要执行代码;
}
<?php
$num=array("0","1","2");
foreach ($num as $value)
{
echo $value . "<br>";
}
?>
--->
0
1
2
关于数组,是数据类型中的复合类型。它能够在一个变量中存储一个或多个值,并且能通过索引号访问对应的值。要注意的是,数组索引号是从零(0)开始。零(0)就是第一位。
索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组
声明数组关键字 - array()
索引数组:
要注意的是,索引数组索引号是从零(0)开始。零(0)就是第一位。
$a = array("1","2","3");
关联数组:
$num=array("one"=>"1","two"=>"2","three"=>"3")
函数
函数,在每个程序语言中都及其重要,它将不同功能代码打包成不同的代码块,极大减少了代码的冗杂。
function 函数名(参数1,参数2,...参数n){
函数体,具体代码
[return 参数];
}
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
--> 1 + 16 = 17
形式参数:如果函数需要传入参数,需要用到形式参数,也可以理解为记号,标志。
实际参数:在向函数传入实际参数时,所传入的参数值是实际参数。
函数也可以是没有参数的,也可以不返回值。
字符串操作
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”替换成“<br/>”
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—使用自然排序法对字符串进行大小比较
strncasecmp—对字符串的前N个字符进行大小比较,不区分大小写
strncmp—对字符串的前N个字符进行大小比较
strpbrk—通过比较返回一个字符串的部分
strpos—查找并返回首个匹配项的位置
strrchr—通过从后往前比较返回一个字符串的部分
strrev—将字符串里面的所有字母反向排列
strripos—从后往前查找并返回首个匹配项的位置,匹配不区分大小写
strrpos–从后往前查找并返回首个匹配项的位置
strspn—匹配并返回字符连续出现长度的值
strstr—通过比较返回一个字符串的部分
strtok—用指定的若干个字符来分割字符串
strtolower—将字符串转变为小写
strtoupper–将字符串转变为大写
strtr—对字符串比较替换
substr_compare—对字符串进行截取后的比较
substr_count—计算字符串中某字符段的出现次数
substr_replace—对字符串中的部分字符进行替换
substr—对字符串进行截取
trim—去除字符串两边的空白或者指定的字符
ucfirst—将所给字符串的第一个字母转换为大写
ucwords—将所给字符串的每一个英文单词的第一个字母变成大写
vfprintf—按照要求对数据进行返回,并直接写入文档流
vprintf—按照要求对数据进行显示
vsprintf—按照要求对数据进行返回,但是不输出
wordwrap—按照一定的字符长度分割字符串
php文件引用
PHP文件引用是指将另一个脚本的全部内容以及功能包含到当前脚本中进行使用,可以减少代码的重用。与C语言中的include使用大致相似。
引用文件语句:
include语句
使用include语句引用外部文件时,只有代码执行到include语句时才会将外部
文件引用并读取代码。
使用:include(引用文件名称)
require语句
一般要放在文件起始位置,常用于引用需要使用的公共函数文件和公共类文件。
include语句与require语句比较:
在调用文件时,如果未找到,require语句会输出错误信息,并且终止脚本处理。include语句会输出警告,但不会终止脚本的处理。
include_once语句与require_once语句
这两个与上面两个相似,只不过在执行导入文件前,他们会检测该文件是否在其他地方被引用过,如果有,则不再引用,并且程序只能引用一次。
1、PHP语言的扩展名为 .php
2、PHP程序中可以包含 html,JavaScript代码
3、脚本范围在 <?php 这个范围内 ?>
4、PHP注释有://,#,/* ... */
5、在编写PHP代码时,每个语句结束时,都不要忘记使用英文分号(;),即为指令分隔符
开发与交互
web交互
$_GET:获取通过GET方式提交的数据
$_POST:获取通过POST方式提交的数据
$_COOKIE:获取Cookie数据,这些数据多数是由setcookie()函数设置的值
$_SESSION:获取包含与所有会话变量有关的信息
$_FILES:处理文件上传
- Get与POST
关于GET: 请求URL固定,所有参数均后缀在URL后面,以key=value&key1=value1&key2=value2方式拼装 ; 请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;
例如:login.actionname=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
样式举例
<html>
<head>
<meta charset="utf-8" />
<title>GET请求例子</title>
</head>
<body>
<form method="GET" action="1.php">
名字:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
<input type="submit">
</form>
</body>
</html>
<?php
$name = $_GET["name"];
$age = $_GET["age"];
echo "恭喜".$name."你"."今年".$age."岁了";
?>
---> 恭喜1你今年1岁了
关于POST: 可以将代码中get方式改为post方式进行学习即可
1、请求URL固定,所有参数均放在http的请求报文中,即放在了body中!所有参数以json或者XML格式序列化文本串或form-data传输。
2、请求URL不固定,部分参数会放在URL中,即http://domain.com/userlogin/login?sign=xxx×tamp=xxx以拼装成最终的服务器请求页面连接,将其他业务参数放在body中!所有参数以json或者XML格式序列化文本串或form-data传输。
这里重点对于POST方式三种数据格式进行说明!
1、JSON数据放在BODY中,如下演示:
"{"name":"用户名","id":"1"} "
2、XML数据放在BODY中,如下演示:
"<name>用户名<name><id>1</id>"
3、form-data数据放在BODY中,如下演示:
2.Cookie与Session
Cookie与Session的区别:
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
关于 Cookie:
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
关于Session:
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie
name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象
value为SessionId不存在**(Session对象默认存活30分钟)**,返回1中重新去创建Session与特殊的Cookie
value为SessionId存在,返回session对象
附注:
session不产生cookie;
session与cookie都是为了方便用户登录,
cookie可以降低服务器的负载,
session在浏览器关闭后会销毁,
cookie可以指定活动周期
文件上传
关于文件上传
实现文件上传的预变量为$_FILES
在php.ini中有些参数可以进行文件控制
在 php.ini 中定位到File Uploads处:
file_uploads:如果该值设置为On,代表服务器支持文件上传,Off为不支持,默认为On。
upload_tmp_dir:可以设置上传文件的临时目录,上传后,先放在临时目录中,多数使用系统 默认目录。
upload_max_filesize:服务器允许上传文件最大的值,MB为单位。默认为2MB。
php.ini文件修改后,需要重启服务器。
下面是 $_FILES 预定义变量中参数的含义:
$_FILES["filename"]["name"]:上传文件的名字
$_FILES["filename"]["size"]:上传文件的大小,单位为字节
$_FILES["filename"]["type"]:上传文件的MIME类型
$_FILES["filename"]["tmp_name"]:上传文件临时目录的
$_FILES["filename"]["error"]:上传文件的结果,如果返回0,则说明文件上传成功
文件上传页面
<html>
<head>
<meta charset="utf-8" />
<title>文件上传例子</title>
</head>
<body>
<form action="uploadfile.php" method="POST" enctype="multipart/form- data">
上传文件:<br>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交文件">
</form>
</body>
</html>
在这,我们要注意的是,form表单中的 enctype 属性,它规定了form表单数据在发送
到服务器时候的编码方式, multipart/form-data ,是指定传输数据为二进制数
据,例如图片、mp3、文件。然后是下面上传文件域的设置,input下的 type 属性设
置为 file 即代表上传文件域。
然后是 uploadfile.php 代码的编写:
<?php
if ($_FILES["file"]["error"] > 0)
{echo "错误: " . $_FILES["file"]["error"] . "<br>"; }
else {echo "文件是: " . $_FILES["file"]["name"] . "<br>";
echo "MIME类型是: " . $_FILES["file"]["type"] . "<br>";
echo "大小是: " . $_FILES["file"]["size"] . " <br>";
echo "存储在: " . $_FILES["file"]["tmp_name"]; }?>
数据库交互
我们使用 mysqli 扩展,它与 mysql 扩展用法一样,基本相似,但是 mysqli 的函
数名称是以 mysqli 开始的。
mysqli连接是永久连接,而mysql是非永久连接。
mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。
mysqli连接:一直都只使用同一个进程。
好处:这样就可以很大程度的减轻服务器端压力。
当然,如果mysql也需要永久连接的话,就可以使用mysql_pconnect()这个函数
还有一个 pdo 此参数可以在php中适应多种数据库语句,而sqli仅适用mysql
交互的五个步骤
- 连接MYSQL数据库
1.mysqli_connect("MySQL服务器地址","用户名","密码","连接数据库名称(可 选)","MySQL服务器使用的端口(默认3306)")
2.选择MYSQL数据库
mysqli_select_db("连接表示(必选参数)","数据库名称(必选参数)") 当然在连接数据库时,也可以同时选择数据库名称
3.执行sql语句
mysqli_query("连接标识(必选参数)","查询语句(必选参数)")
4.获取执行结果
mysqli_fetch_array():将结果集返回数组中。
mysqli_fetch_object():从结果集中获取一行作为对象
mysqli_fetch_row():从结果集中获取一行作为枚举数组
mysqli_fetch_assoc():从结果集中获取一行作为关联数组
mysqli_num_rows():获取查询结果集中的记录数
5.释放内存,关闭连接
mysqli_free_result(): 释放结果内存。 mysqli_close():关闭先前打开的数据库连接。
<?php
$host = "127.0.0.1";
$user = "root";
$pwd = "root";
$connID = mysqli_connect($host,$user,$pwd);
$select_db = mysqli_select_db($connID,"information_schema");
if($connID){
echo "<script type='text/javascript'>alert('连接成功!') </script>";
}else{
echo "<script type='text/javascript'>alert('连接失败!') </script>";
} ?>
- 点赞
- 收藏
- 关注作者
评论(0)