PHP进阶

1、数组

语法

$arr = array(); //创建一个空数组

php的数组分为两类:索引数组、关联数组

1、索引数组

数组的键为从0开始的整数

创建方式:

方式1$arr = array('张三','李四','王五');  //他们的键值分别对应0, 1, 2

方式2$arr = array('0' => '张三','1' => '李四', '2' => '王五');

方式3$arr[0] = '张三';
$arr[1] = '李四';
$arr[2] = '王五';

访问方式:

$arr0 = $arr[0];
或者
$arr0 = $arr['0'];

循环访问数组

foreach($arr as $index => $val) {
    //....
}

2、关联数组

关联数组是指数组的键都是字符串的数组

$arr = array(
    'zhangsan' => '张三',
    'lisi' => '李四',
    'wangwu' => '王五'
);

赋值:

方式1$arr = array(
    'zhangsan' => '张三',
    'lisi' => '李四',
    'wangwu' => '王五'
);

方式2$arr['zhangsan'] = '张三';

取值

$name = $arr['zhangsan'];

2、函数

1、自定义函数

使用function关键字声明

function test($a, $b,..) {
    //....
    return something;
}

函数名和变量名一样,使用字母或下划线开头

return关键字用来返回结果

可变函数,将函数存放在变量中,通过变量调用函数

function test() {
    //....
}
$func = 'test';
$func();

2、内置函数

str_replace

3、判断函数是否存在

使用function_exists()来检测函数是否存在

function_exists('func'); //返回一个布尔值

使用class_exists()来检测类是否存在

class_exists(className); //返回一个布尔值

3、类和对象

类是对一类事物的抽象,对象则是事物的 具体实例

定义类

使用关键字class,类名首字母大写,字母与下划线开头。

class Car {
    $name = '汽车';
    function getName () {
        return $this->name;
    }
}

定义实例

$car = new Car();
echo $car->getName();

属性

类中变量称为属性或者是字段。声明属性的时候可以为之添加控制其访问权限的关键字

class Car {
    //公有属性
    public $name = '汽车';

    //私有属性
    private $color = '白色';

    //受保护属性
    protected $price = '120000';
}

公有属性外部可以直接访问

echo $car->name;

私有属性和受保护属性是不允许外部访问,但在类的成员方法内部可以调用。调用使用->

类的方法也可以添加访问权限关键字

class Car {
    public function getName() {
        return '汽车';
    }
​}

静态方法

使用关键字static声明,静态方法直接通过类名调用,使用::

class Car {
    public static function getName() {
        return '汽车';
    }
​}

静态方法调用

echo Car::getName;

构造函数和析构函数

构造函数使用__construct 定义,会在每次对象创建的时候调用该函数,因此常用来创建对象的时候进行一些初始化。

class Car {
   function __construct() {
       print "构造函数被调用\n";
   }
}

在子类中如果定义了__construct则不会调用父类的__construct,如果需要同时调用父类的构造函数,需要使用parent::__construct()显式的调用。

class Car {
   function __construct() {
       print "父类构造函数被调用\n";
   }
}
class Truck extends Car {
   function __construct() {
       print "子类构造函数被调用\n";
       parent::__construct();
   }
}
$car = new Truck();

PHP5支持析构函数,使用__destruct()进行定义,析构函数指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数。


class Car {
   function __construct() {
       print "构造函数被调用 \n";
   }
   function __destruct() {
       print "析构函数被调用 \n";
   }
}
$car = new Car(); //实例化时会调用构造函数
echo '使用后,准备销毁car对象 \n';
unset($car); //销毁时会调用析构函数

静态关键字static

静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用。静态属性不允许对象使用->操作符调用。

静态方法也可以通过变量来进动态调用

$func = 'getSpeed';
$className = 'Car';
echo $className::$func();  //动态调用静态方法

静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。

class Car {
    private static $speed = 10;

    public static function getSpeed() {
        return self::$speed;
    }

    public static function speedUp() {
        return self::$speed+=10;
    }
}
class BigCar extends Car {
    public static function start() {
        parent::speedUp();
    }
}

BigCar::start();
echo BigCar::getSpeed();

访问控制
使用关键字,public、private、protected

公有成员可以在任何地方被访问,当未设置访问权限关键词时默认为公有
私有成员只能被自身访问
受保护成员能被自身、子类和父类访问

如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。

class Car {
    private function __construct() {
        echo 'object create';
    }

    private static $_object = null;
    public static function getInstance() {
        if (empty(self::$_object)) {
            self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象
        }
        return self::$_object;
    }
}
//$car = new Car(); //这里不允许直接实例化对象
$car = Car::getInstance(); //通过静态方法来获得一个实例

继承

使用extend关键字

class Bus extend Car {
    //....
}

重载

PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。

class Car {
    private $ary = array();

    public function __set($key, $val) {
        $this->ary[$key] = $val;
    }

    public function __get($key) {
        if (isset($this->ary[$key])) {
            return $this->ary[$key];
        }
        return null;
    }

    public function __isset($key) {
        if (isset($this->ary[$key])) {
            return true;
        }
        return false;
    }

    public function __unset($key) {
        unset($this->ary[$key]);
    }
}
$car = new Car();
$car->name = '汽车';  //name属性动态创建并赋值
echo $car->name;

方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。

class Car {
    public $speed = 0;

    public function __call($name, $args) {
        if ($name == 'speedUp') {
            $this->speed += 10;
        }
    }
}
$car = new Car();
$car->speedUp(); //调用不存在的方法会使用重载
echo $car->speed;

同一个类的实例对象是相等的,但不全等

class Car {
}
$a = new Car();
$b = new Car();
if ($a == $b) echo '==';   //true
if ($a === $b) echo '==='; //false

对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这时__clone方法会被调用,通过这个魔术方法来设置属性的值。

class Car {
    public $name = 'car';

    public function __clone() {
        $obj = new Car();
        $obj->name = $this->name;
    }
}
$a = new Car();
$a->name = 'new car';
$b = clone $a; //克隆对象$a会调用对象的类的__clone方法
var_dump($b);

对象序列化

可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。

class Car {
    public $name = 'car';
}
$a = new Car();
$str = serialize($a); //对象序列化成字符串
echo $str.'<br>';
$b = unserialize($str); //反序列化为对象
var_dump($b);

4、字符串

定义方式:单引号、双引号、heredoc

$str  = 'hello world';
$str1 = "hello world";
$str2 = <<<GOD
hello
world
GOD>>>

双引号字符串中间允许使用变量进行插值

$str = 'world';
$str1 = "hello $str"; //str1为hello world

去掉字符串首尾空格

trim()rtrim()ltrim().他们会去掉字符串的首尾字符,并返回一个处理后的心字符串,但原来的字符串并未改变。

$str = " hello world ";
echo $str1 = trim($str);  //输出hello world
echo $str2 = ltrim($str); //输出hello world 
echo $str3 = rtrim($str); //输出 hello world
echo $str; //输出 hello world

//改变原字符串
$str = trim($str);

获取字符串长度

获取长度的方法:strlen

$str = "hello";
echo $len = strlen($str); //输出5

获取字符串中中文长度mb_strlen()

$str = "hello 你好";
echo strlen($str); //输出12,中文就占了6个字符,也就是说每个中文三个字符,但这并不准确。
echo mb_strlen($str, 'utf-8'); //输出8,其中中文占两个字符,也就是说每个中文占一个字符

截取

英文字符串截取,substr()

语法:substr(字符串,截取开始位置,截取个数)。注意:字符串的索引是从0开始的。

截取会返回一个新字符串,但并不会改变原字符串。

$str = "hello world";
echo substr($str,0,7); //输出hello w
echo $str; //输出hello world

中文字符串截取mb_substr()

语法:mb_substr(字符串, 开始位置, 截取个数, 'utf-8');

$str = "hello 你好";
echo mb_substr($str, 0, 7, 'utf-8');//输出hello 你

查找

查找字符串在另一段字符串中的首次出现的位置。strpos(原字符串, 查找字符串)

$str = "hello world";
$pos = strpos($str, 'world');
echo $pos; //输出为6,代表world在$str出现的位置在第六个

替换

替换字符串str_replace(被替换字符串, 代替字符串, 被搜索的字符串[,替换计数])

$str = "hello world";
$totol = 0;
$str1 = str_replace('l', '-', $str, $totol);
echo $str1; //输出he--o wor-d
echo $totol; //输出3,代表替换了3处
echo $str; //原字符串并不改变

格式化字符串

格式化字符串函数sprintf()

语法:sprintf(格式,要转化的字符串)

$str = '99.9';
$result = sprintf('%01.2f', $str);
echo $result;  //结果显示99.90

1、这个 % 符号是开始的意思,写在最前面表示指定格式开始了。 也就是 “起始字符”, 直到出现 “转换字符” 为止,就算格式终止。

2、跟在 % 符号后面的是 0, 是 “填空字元” ,表示如果位置空着就用0来填满。

3、在 0 后面的是1,这个 1 是规定整个所有的字符串占位要有1位以上(小数点也算一个占位)。
如果把 1 改成 6,则 $result的值将为 099.90
因为,在小数点后面必须是两位,99.90一共5个占位,现在需要6个占位,所以用0来填满。

4、在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,小数点后的数字必须占2位。 如果这时候,$str 的值为9.234,则 $result的值将为9.23.
为什么4 不见了呢? 因为在小数点后面,按照上面的规定,必须且仅能占2位。 可是 $str 的值中,小数点后面占了3位,所以,尾数4被去掉了,只剩下 23。

5、最后,以 f “转换字符” 结尾。

数组转为字符串

合并函数implode(),将数组以特定分隔符拼接成一个字符串。

返回值是一个字符串。

语法:implode( 分隔符, 数组 );;分隔符可为空''

$arr = array("hello","world");
$str = implode('-',$arr);
print_r($str); //输出hello-world

字符串分隔为数组

explode以特定分隔符为标志分割字符串,并转为一个数组。

返回值是一个数组。

语法:explode(分隔标志,字符串,数组元素个数)

数组元素个数>0 表示至多;
<0 先加上总个数,若加上后>0,则等于运算后的个数,若小于等于0,则返回一个空数组;
=0 表示不分割,返回整个字符串。

$str = "hello-world";
$arr = explode('-',$str);
print_r($arr); //输出arr("hello","world")

字符串转义

addslashes(添加斜杠语法)为字符串中的特殊字符进行转义,并返回一个新字符串

$str = "what's this?";
$str1 = addslashes($str);
echo $str;

5、正则表达式

使用会尽可能少的匹配 懒惰
使用+会尽可能多地匹配 贪婪

preg_match(正则表达式,字符串,匹配到的字符串数组);这个数组是由匹配到的整个字符串和子组构成的数组。

preg_match只能匹配1次或者0次,匹配到一次就停止搜索

preg_match_alll(正则表达式,字符串,匹配到的字符串数组);匹配所有字符串,返回的数组[0]包含所有完整模式,[1]中包含第一个子组的所有匹配

preg_replace(正则表达式,用于替换的字符串或字符串数组,搜索和替换的字符串或字符串数组)

6、存储

cookie

PHP通过setcookie函数进行Cookie的设置,任何从浏览器发回的Cookie,PHP都会自动的将他存储在$_COOKIE的全局变量之中,因此我们可以通过$_COOKIE['key']的形式来读取某个Cookie值。

setcookie() 定义了 Cookie,会和剩下的 HTTP 头一起发送给客户端。 和其他 HTTP 头一样,必须在脚本产生任意输出之前发送 Cookie(由于协议的限制)。 请在产生任何输出之前(包括 <html><head> 或者空格)调用本函数。

setcookie语法

setcookie(name, value, expire, path, domain, secure, httponly);

  • name cookie的名称
  • value cookie 值
  • expire 过期时间
  • path 服务器路径,表示cookie对路径下的目录有下.默认为'/',表示在所有目录下有效。
  • domain 有效域名或者子域名
  • secure 设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端
  • httponly 设置成 TRUE,Cookie 仅可通过 HTTP 协议访问。

如果在调用本函数以前就产生了输出,setcookie() 会调用失败并返回 FALSE。 如果 setcookie() 成功运行,返回 TRUE。当然,它的意思并非用户是否已接受 Cookie

setcookie('test,'12345',time()+3600); //设置一个cookie,一小时后失效

删除cookie,没有专门用于删除cookie的函数,但是可以使用setcookie,将失效时间设置为过去。

setcookie('test', '', time()-1);

session

session 存储在服务端

在PHP中使用session非常简单,先执行session_start方法开启session,然后通过全局变量$_SESSION进行session的读写

session_star();
$_SESSION['test'] = time();

session会自动的对要设置的值进行encode与decode,因此session可以支持任意数据类型,包括数据与对象等。

session_start();
$_SESSION['ary'] = array('name' => 'jobs');
$_SESSION['obj'] = new stdClass();
var_dump($_SESSION);

删除与销毁session

删除使用unset函数,删除后就会从$_SESSION中去除,无法访问

session_start();
$_SESSION['name'] = 'jobs';
unset($_SESSION['name']);
echo $_SESSION['name']; //提示name不存在

要删除所有session,可以使用session_destroy()函数销毁当前session,销毁后session_id仍会存在

session_start();
$_SESSION['name'] = 'jobs';
$_SESSION['time'] = time();
session_destroy();

session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数。

session_start();
$_SESSION['name'] = 'jobs';
$_SESSION['time'] = time();
unset($_SESSION);
session_destroy(); 
var_dump($_SESSION); //此时已为空

使用:
session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等。

用户在登录成功以后,通常可以将用户的信息存储在session中,一般的会单独的将一些重要的字段单独存储,然后所有的用户信息独立存储。

一般来说,登录信息既可以存储在sessioin中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,cookie需要进行格式化与加密存储,而session存储在服务端则安全性较高。

7、文件系统

file_get_content函数,次函数会将整个文件督导一个字符串中

语法:

$content = file_get_contents('./test.txt');

file_get_contents也可以通过参数控制读取内容的开始点以及长度。

$content = file_get_contents('./test.txt', null, null, 100, 500);

PHP也提供类似于C语言操作文件的方法,使用fopen,fgets,fread等方法,fgets可以从文件指针中读取一行,freads可以读取指定长度的字符串。

$fp = fopen('./text.txt', 'rb');
while(!feof($fp)) { 
    echo fgets($fp); //读取一行
}
fclose($fp);
$fp = fopen('./text.txt', 'rb');
$contents = '';
while(!feof($fp)) {
    $contents .= fread($fp, 4096); //一次读取4096个字符
}
fclose($fp);

使用fopen打开的文件,最好使用fclose关闭文件指针,以避免文件句柄被占用。

判断文件是否存在

函数is_filefile_exists,返回值类型为布尔值

$filename = './test.txt';
echo is_file($filename);
echo file_exists($filename);

如果只是判断文件存在,使用file_exists就行,file_exists不仅可以判断文件是否存在,同时也可以判断目录是否存在,从函数名可以看出,is_file是确切的判断给定的路径是否是一个文件。

函数isreadableis_writeable,用于判断文件是否可读或者可写

文件有很多元属性,包括:文件的所有者、创建时间、修改时间、最后的访问时间等。

fileowner:获得文件的所有者
filectime:获取文件的创建时间
filemtime:获取文件的修改时间
fileatime:获取文件的访问时间

其中最常用的是文件的修改时间,通过文件的修改时间,可以判断文件的时效性,经常用在静态文件或者缓存数据的更新。

$mtime = filemtime($filename);
echo '修改时间:'.date('Y-m-d H:i:s', $mtime);

获取文件大小filesize(),返回的是数字,单位字节。要计算一个目录的大小,只能通过计算目中的文件的大小的总和。

9、Date 日期

php中的时间也是相对于1970年1月1日00:00:00来讲的,是一个以秒为单位的数字

获取这个时间使用time();

$time = time();

date函数用来获取当前日期。

语法: date(日期格式,时间); 时间可省略,却省时默认为当前执行语句的时间。

$time = time();
$date = date('y-m-d',$time);

将某个日期转为格林威治时间的时间戳strtotime

$str = '2014-04-12';
$time = strtotime($str);

strtotime除了能转换日期之外,还能解析日期字符串

strtotime('now'); //当前时间,与time()同
strtotime('+1 week 3 days 7 hours 5 seconds'); //获取1周3天7小时5秒后的时间戳

格林威治时间gmdate,将一个日期或时间转为格林威治时间

$time = time();
$data = date('y-m-d H:i:s', $time);
$gmdate = gmdate('y-m-d H:i:s', $time);

10、图形操作

GD库

Graphic Device的简写,意为图形装置。是用来处理图形的扩展库。PHP通过GD库来处理JPG、PNG、GIF、SWF等。常用在图片加水印,验证码的生成方面。

PHP默认已经集成了GD库,,只需要在安装的时候开启就行。


header("content-type: image/png");
$img=imagecreatetruecolor(100, 100);
$red=imagecolorallocate($img, 0xFF, 0x00, 0x00);
imagefill($img, 0, 0, $red);
imagepng($img);
imagedestroy($img);

创建画布:

imagecreatetruecolor,用来创建一个真彩色的空白图片。

$img = imagecreatetruecolor(100, 100); //创建一个100*100px的画布

设置画笔颜色:

imagecolorallocate,为某个画布指定画笔颜色的RGB值

$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

线段绘制函数

imageline用来绘制线段,指定画布,画笔,以及线段的起点和终点位置

imageline($img, 0, 0, 100,100, $red);

输出图像

headerimagepng输出图像

  • header用来设置图片的格式
  • imagepng用来导出画布为图片
header("content-type: image/png");
imagepng($img); 

还可以将图片保存到文件中

imagepng($img, 'img.png');

销毁图片

imagedestroy销毁图片,释放图片所占内存

imagedestroy($img);

GD库还可以进行其他很多操作。常用的有绘制线条,背景填充,画矩形,绘制文字等。

绘制文字

imagestring用来绘制文字

语法:imagestring(画布,字体大小,文字显示的坐标x, 文字显示的坐标y, 绘制的文字,画笔颜色)

$img = imagecreatetruecolor(100,100);
$red = imagecolorallocate($img, 0xff,0x00,0x00);
imagestring($img, 5, 0, 0, 'hello world', $red);
header('content-type:image/png');
imgaepng($img);
imagedestroy($img);

图片可以保存为其他格式,但是要使用不同的函数

imagepng($img, savepath); savepath为图片保存的路径,方便重复使用。

imagegif($img, savepath);

imagejpeg($img, savepath, 质量百分比); 因为要进行压缩。

图片验证码

图片验证码的原理是在画布上绘制字符,为了防止程序识别,然后为画布绘制燥点,加斜线、加倾斜等,导出为图片。
燥点绘制使用imagesetpixel,就是设置固定坐标的像素点的颜色

imagesetpixel($img, random(0,100),random(0,100), $black);

图片水印

水印的制作方式一般有两种,一是增加字符串,而是在图片上加上logo或者其他图片

从已存在的图片创建画布

$img = imagecreatefromjpeg($filename);

如果使用字符串作为水印,就如同之前的一样,绘制文字就ok。但是如果是要加另一个图片,那么则要创建另一个图像对象

$logo = imagecreatefrompng($filename2);

然后将logo图片复制到原图的指定位置,并指定logo的大小

imagecopy($img, $logo, 20, 20, 0, 0, $width,$height);

然后导出图片文件到原地址。

header('content-type: image/jpeg');
imagejpeg($img, $filename);

11、异常处理

try{
    //捕获异常
}
catch(Exception $e) { //Exception是php定义好的异常类
    //异常处理
}

除了程序运行可能抛出异常,也可以使用throw手动抛出异常,抛出的异常应该是Exception的实例对象

try {
    //.....
    throw new Exception('错误信息');
}catch(Exception $e) { 
    echo $e->getMessage();
}

Exception

包含属性:

  • message 异常消息的内容
  • code 异常代码
  • file 抛出异常的文件
  • line 抛出异常在该文件的行数

包含方法:

  • getTrace 获取异常追踪信息
  • getTraceAsString 获取异常追踪信息的字符串
  • getMessage 获取错误信息
  • 其他更多

还可以通过继承Exception类创建自定义的异常处理类

class MyException extend Exception {
    //....
}

12、数据库

php支持的数据库很多,Mysql在php应用很广泛。

PHP中一个数据库可能有一个或者多个扩展,其中既有官方的,也有第三方提供的。像Mysql常用的扩展有原生的mysql库,也可以使用增强版的mysqli扩展,还可以使用PDO进行连接与操作。

mysql扩展进行数据库连接的方法:

$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');

mysqli扩展:

$link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');

PDO扩展

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);

连接数据库

使用mysql_connect(地址,账号,密码);

选择数据库

使用mysql_select_db('db1');

设置连接数据库使用的字符串编码
mysql_query("set names 'utf-8'");

查询操作
mysql_query加sql语句的形式发送查询指令

$res = mysql_query("select * from user limit 1");

查询操作会返回一个资源句柄(resource),然后就可以通过这个资源获取查询结果中的数据。

$row  = mysql_fetch_array($res);
var_dump($row);

默认的,PHP使用最近的数据库连接执行查询,但如果存在多个连接的情况,则可以通过参数指令从那个连接中进行查询。

$link1 = mysql_connect('127.0.0.1', 'code1', '');
$link2 = mysql_connect('127.0.0.1', 'code1', '', true); //开启一个新的连接
$res = mysql_query('select * from user limit 1', $link1); //从第一个连接中查询数据

插入数据

$sql = "insert into user(name,age,school) values ('麦兜',4,'春田花花幼稚园');"
mysql_query($sql); //执行插入操作

获取查询结果

获取方式有很多,最常用的是mysql_fetch_array。可以通过设定参数来更改行数据的下标,默认的会包含数字索引的下标以及字段名的关联索引下标。

$sql = "select * from user limit 1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

可以通过设定参数MYSQL_NUM只获取数字索引数组,等同于mysql_fetch_row函数,如果设定参数为MYSQL_ASSOC则只获取关联索引数组,等同于mysql_fetch_assoc函数。

$row = mysql_fetch_row($result);
$row = mysql_fetch_array($result, MYSQL_NUM); //这两个方法获取的数据是一样的
$row = mysql_fetch_assoc($result);
$row = mysql_fetch_array($result, MYSQL_ASSOC);

如果要获取数据集中的所有数据,我们通过循环来遍历整个结果集。

$data = array();
while ($row = mysql_fetch_array($result)) {
    $data[] = $row;
}

删除数据

$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
    echo '更新成功';
}

或者

$sql = "delete from user where id=2 limit 1";
if (mysql_query($sql)) {
    echo '删除成功';
}

对于删除与更新操作,可以通过mysql_affected_rows函数来获取更新过的数据行数,如果数据没有变化,则结果为0。


$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
    echo mysql_affected_rows();
}

关闭连接

mysql_close();
mysql_close($link); 关闭指定连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值