PHP 5 及以上版本建议使用以下方式连接 MySQL :
MySQLi extension (“i” 意为 improved)
PDO (PHP Data Objects)
PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。
二者都支持预处理语句,可防止SQL注入。
代码示例:
$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中
$dsn="{数据库类型}:host={数据库地址};dbname={数据库名称}";
new 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::query()获取结果集;
查询结果放在PDOStatement对象中;
查询单条记录:$result->fetch()
获取所有记录:$result->fetchAll()
直接遍历结果集:foreach($result as $row){ }
将结果集映射到对象再遍历:类名与表名一致,属性与字段名一致,通过 _get() 魔术方法实现查询
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()方法与上一个方法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 $name;
private $id;
public function __get($propertyName)
{
return $this -> $propertyName ;
}
}
$result->setFetchMode(PDO::FETCH_CLASS,’student');
将静态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();