PHP的PDO基本操作

PDO与Mysqli的区别

PHP 5 及以上版本建议使用以下方式连接 MySQL :

MySQLi extension (“i” 意为 improved)

PDO (PHP Data Objects)

PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。

二者都支持预处理语句,可防止SQL注入。

PDO连接Mysql数据库

代码示例:



$servername = "localhost";

$username = "username";

$password = "password";

try {   

$pdo = new PDO("mysql:host=$servername;", $username, $password);//连接数据库并创建PDO对象 

    echo "连接成功";

}

catch(PDOException $e)

{   

echo $e->getMessage();//捕获异常并处理

}

?>

PDO的数据源 dsn:

连接一个数据库最重要的四个参数:数据库地址、数据库名称、用户名、密码

由于pdo支持多种类型的数据库,因此我们将数据库类型、地址、名称封装在数据源dsn中

$dsn="{数据库类型}:host={数据库地址};dbname={数据库名称}";

连接数据库并创建PDO对象:

 new PDO(数据源, 用户名,密码);

使用PDO 增删改数据

$sql="INSERT INTO 表名称 VALUES (值1, 值2,....)";

$num=$pdo -> exec($sql);//使用exec语句执行SQL语句,返回受影响的行数。

$insertId=$pdo ->lastInsertId(); //PDO::lastInsertId — 返回最后插入行的ID或序列值

if($number>0){

    print'成功添加了’ .$num.'条记录,新增主键id是:'.$insertId;

}

使用PDO查询数据

使用PDO::query()获取结果集;

查询结果放在PDOStatement对象中;

查询单条记录:$result->fetch()

获取所有记录:$result->fetchAll()

直接遍历结果集:foreach($result as $row){ }

将结果集映射到对象再遍历:类名与表名一致,属性与字段名一致,通过 _get() 魔术方法实现查询

fetch查询单条记录

setFetchMode(PDO::FETCH_ASSOC) 读取模式: 从结果集中获取以列名为索引的关联数组

PDOStatement::fetch()解析结果集

PDOStatement类中的fetch()方法可以将结果集中当前的记录以某种方式返回,并将结果集指针移至下一行,当到达结果集末尾时返回FALSE

$sql="SELECT 列名称 FROM 表名称"

$result=$pdo->query($sql);

if($result && $result->rowCount()){

    $result->setFetchMode(PDO::FETCH_ASSOC);

    $row = $result->fetch();

    echo $row['字段名1'];

    echo $row['字段名2'];

    }

fetchAll 查询全部记录

fetchAll()方法与上一个方法fetch()类似,但是该方法只需要调用一次就可以获取结果集中的所有行,并赋给返回的数组(二维)

$result->setFetchMode(PDO::FETCH_ASSOC);

$rows=$result->fetchAll();//将结果集转为二维数组

foreach ($rows as $row){

    echo $row['字段名1'];

    echo $row['字段名2'];   

}  

也可跳过fetch解析,直接操作结果集

$result->setFetchMode(PDO::FETCH_ASSOC); 

$foreach ($result as $row){ 

}

使用模型映射的方式处理结果集

PDO::FETCH_CLASS 返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名

class student

{
    private $nameprivate $id;
    
        public function __get($propertyName)

{    
    return $this -> $propertyName ;
}
}
$result->setFetchMode(PDO::FETCH_CLASS,’student'); 

PDO预处理语句

将静态SQL语句与动态数据分离,在SQL语句中使用占位符"?“或”:字段名"

PDO::prepare()准备预处理语句;

execute([真实替换数据])执行预处理语句

占位符":字段名"

$sql="SELECT 字段名1=:字段名1, 字段名2=:字段名2  FROM 表名称";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(":字段名1", $value1);

$stmt->bindParam(" :字段名2 ", $value2); 

//给变量赋值

$stmt->execute();

占位符"?"

$sql= "SELECT ?, ?  FROM 表名称";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(1, $value1);

$stmt->bindParam(2, $value2); 

//给变量赋值

$stmt->execute();

你可能感兴趣的:(php,mysql,数据库)