| 
                         验证两种prepare模式 
    -  服务端prepare模式( ATTR_EMULATE_PREPARES = false) 
 
 
- <?php  
 - $dbms='mysql'; //数据库类型  
 - $host='xxx'; //数据库主机名  
 - $dbName='test'; //使用的数据库  
 - $user='xx'; //数据库连接用户名  
 - $pass='123456'; //对应的密码  
 - $dsn="$dbms:host=$host;dbname=$dbName";  
 - try {  
 -  $pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象  
 -  $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);  
 -  echo "----- prepare begin -----  
 - ";  
 -  $stmt = $pdo->prepare("select * from test.chanpin where id = ?");  
 -  echo "----- prepare after -----  
 - ";  
 -  $stmt->execute([333333]);  
 -  echo "----- execute after -----  
 - ";  
 -  $rs = $stmt->fetchAll();  
 - } catch (PDOException $e) {  
 -  die ("Error!: " . $e->getMessage() . "<br/>");  
 - } 
 
  
strace -s200 -f php mysql1.php 跟踪 
大家可以看到这个模式下,prepare的时候,是将query+占位符 发送给服务端的: 
    -  本地prepare模式 (ATTR_EMULATE_PREPARES = true ) 
 
 
- <?php  
 - $dbms='mysql'; //数据库类型  
 - $host='xx'; //数据库主机名  
 - $dbName='test'; //使用的数据库  
 - $user='xx'; //数据库连接用户名  
 - $pass='123456'; //对应的密码  
 - $dsn="$dbms:host=$host;dbname=$dbName";  
 - try {  
 -  $pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象  
 -  $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);  
 -  echo "----- prepare begin -----  
 - ";  
 -  $stmt = $pdo->prepare("select * from test.chanpin where id = ?");  
 -  echo "----- prepare after -----  
 - ";  
 -  $stmt->execute([333333]);  
 -  echo "----- execute after -----  
 - ";  
 -  $rs = $stmt->fetchAll();  
 - } catch (PDOException $e) {  
 -  die ("Error!: " . $e->getMessage() . "<br/>");  
 - } 
 
                          (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |