最近开始本身写写代码,打打基础下降翻手册频率。php
首先就是写数据库操做,增删改查写成4个方法。使用pdo,遇到一些问题记录一下。html
$pdo = new PDO('mysql:host=127.0.0.1;dbname=db', 'user', 'password');
1. limit bindParam()第三个参数默认为str类型mysql
$sql = 'select * from table where id=:id limit :start,:row'; $stmt = $pdo->prepare($sql); $id = 28; $start = 0; $row = 1; $stmt->bindParam(':id', $id); //这里必须有第三个参数,不然默认为字符类型,查询结果为空 $stmt->bindParam(':start', $start, PDO::PARAM_INT); $stmt->bindParam(':row', $row, PDO::PARAM_INT); $stmt->execute(); $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
2. in 参数不能绑定sql
$sql = 'select * from table where id in :in'; $in = '(28,29)'; $stmt = $pdo->prepare($sql); //不论有没第三个参数,结果都是空 //$stmt->bindParam(':in', $in); $stmt->bindParam(':in', $in, PDO::PARAM_STR); $stmt->execute(); $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
3. 要防止占位符重复数据库
以下面:name就重复了fetch
$sql = 'update table set name=:name where name=:name';
4. insert使用?占位符比:key类型的占位符方便htm
$sql = 'insert into table (name,password) values (?,?)'; $stmt = $pdo->prepare($sql); $insertValue = array('name', 'password'); $stmt->execute($insertValue);
5. 不能使用foreach的$key和$value绑定,bindParam($key, $value)ip
原来这条鸟哥几年前已经分析过了:http://www.laruence.com/2012/10/16/2831.htmlpdo