获得受影响的行数

1.计算返回的行数

<?php

$dsn="mysql:host=localhost;dbname=produce";

$user='root';

$pwd='';

$array=array("orange","pear","banana");

 

 

try{

    $dbh=new PDO($dsn,$user,$pwd);

$sql="SELECT COUNT(*) from fruit WHERE name='pear'";

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

$result=$stmt->execute();

echo "there are ".$stmt->fetchcolumn()."rows returned";

}

catch(PDOException $e){

    echo $e->getmessage;

}

 

?>

PDO没有能够计算select查询返回行数的魔术方法,但是可以使用PDOStatement->rowCount方法利用一些PDO数据库驱动返回select语句返回的行数,但是这种方法不通用

本例中使用sql的聚合参数COUNT   

以上主要是查询select返回的行

下面介绍的是被update,insert影响的行

2.计算影响的行数

<?php

$dsn="mysql:host=localhost;dbname=produce";

$user='root';

$pwd='';

$array=array("orange","pear","banana");

 

 

try{

  $dbh=new PDO($dsn,$user,$pwd);

  $sql="INSERT INTO fruit (name,number) VALUES ('gcc',12)";

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

   $stmt->execute();

   echo "受影响的行".$stmt->rowCount():

}

catch(PDOException $e){

    echo $e->getmessage;

}

 

?>

计算受影响的行用到了rowCount函数

 

 

如何获得一个新插入行的自动增加字段

PDO提供了lastinsertid方法,它会返回上一个insert操作产生的id

<?php

$dsn="mysql:host=localhost;dbname=produce";

$user='root';

$pwd='';

$array=array("orange","pear","banana");

 

 

try{

    $dbh=new PDO($dsn,$user,$pwd);

$sql="INSERT INTO fruit (name,number) VALUES('gbd',122)";

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

$result=$stmt->execute();

echo $dbh->LastInsertID();

}

catch(PDOException $e){

    echo $e->getmessage;

}

?>

使用lastinsertid方法时,一定要使用PDO对象($dbh)而不是PSOStatement对象($stmt)

 

 

如何显示select查询的行数

$sql="SELECT * FROM fruit WHERE name LIKE 'g%'";

while($row=$dbh->query($sql)){

    print $row['name'];

    print $row['number'];

}   此处使用的query语句查询

 

$sql="SELECT * FROM fruit WHERE name LIKE 'g%'";

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

$stmt->execute();

while($row=$stmt->fetchObject()){

    print $row['name'];

    print $row['number'];

}

或者while($row=$stmt->fetch(PDO::FETCH_ASSOC)){

   print $row['name'];

    print $row['number'];

}

 

如何进行事务处理

 

使用PDO->beginTransaction 方法开始事务处理 

使用PDO->commit结束它

如果中间发生了问题,使用PDO->rollback方法撤销前面的指令