php学习笔记(二十三)PDO的预处理语句的查询以及结果集的使用

<?php 
/**
 * php data object
 * 
 * 预处理(推荐使用)
 * 
 * PDOStatement
 * 可以准备一个预处理语句,也可以处理结果集
 * 占位符有两种:
 * 		?参数		索引数组,按索引顺序使用
 * 		名字参数		关联数组,按名次使用,与顺序无关
 * 
 */
//一:链接
$dsn = "mysql:host=localhost;dbname=hibernate";
$username = "root";
$passwd = "root";
$options = array(PDO::ATTR_AUTOCOMMIT=>1);
try {
	$pdo = new PDO($dsn, $username, $passwd, $options);
}catch (PDOException $e){
	echo "数据库连接失败".$e->getMessage();
	exit;
}

//二:预处理
//准备语句
//$sql = "select * from users where id = ?";
$sql = "select * from users where id = :id";
$stmt = $pdo->prepare($sql);//所有sql都可以执行
//绑定
//$stmt->bindParam(1, $id);
$stmt->bindParam(":id", $id);
$id = 2;
if ($stmt->execute()) {
	echo "执行成功"."<br>";
	echo "最后影响的插入id".$pdo->lastInsertId()."<br>";
}

//直接在执行的时候插入语句(可用于传值接收)
$sql = "select * from users where id = :id";
$stmt = $pdo->prepare($sql);//所有sql都可以执行
$stmt->execute(array(":id"=>2));

//直接在执行的时候插入语句(可用于传值接收)
$sql = "select * from users where id = ?";
$stmt = $pdo->prepare($sql);//所有sql都可以执行
$stmt->execute(array(12));

//获取结果集
$sql = "select * from users where id < ?";
$stmt = $pdo->prepare($sql);//所有sql都可以执行
$stmt->execute(array(12));
//设置模式的话,就是索引获取都按照这个模式了
$stmt->setFetchMode(PDO::FETCH_NUM);
/**
 * 方式一:单行获取
 */
//索引数组返回
//$row = $stmt->fetch(PDO::FETCH_NUM);
//关联数组返回
//$row = $stmt->fetch(PDO::FETCH_ASSOC);
//都返回返回
//$row = $stmt->fetch(PDO::FETCH_BOTH);
//然后再进行获取
//$row = $stmt->fetch();
//print_r($row);
/**
 * 方式二:全部获取
 */
$data = $stmt->fetchAll();

/**
 * 方式三:绑定列
 * 下载执行方法之前
 * 执行 时候后,循环输出时,进行赋值
 */
$sql = "select * from users where id < :id";
$stmt = $pdo->prepare($sql);//所有sql都可以执行
$stmt->bindColumn("id", $id,PDO::PARAM_INT);
$stmt->bindColumn("name", $name,PDO::PARAM_STR);
$stmt->bindColumn("price", $price);
$stmt->execute(array(":id"=>5));
//输出列名
for ($i = 0; $i < $stmt->columnCount(); $i++) {
	$field = $stmt->getColumnMeta($i);
	echo $field["name"]."---";
}
echo "<br>";
//输出所有查询数据
while ($stmt->fetch()){
	echo "$id--$name--$price<br>";
}
echo "总行数:".$stmt->rowCount()."<br>";
echo "总列数:".$stmt->columnCount()."<br>";


?>

你可能感兴趣的:(学习笔记)