php+pdo+fetch+obj,php7下pdo的各种fetch模式速度比较

// ***************需替换***************

$pdo = new PDO('mysql:host=127.0.0.1;dbname=test_db;port=33062', 'root', 'pass');

// 性能检测脚本

function profile($text, $f) {

$testCount = 5000;

$totalTime = .0;

for($i = 0; $i < $testCount; ++$i){

$start = microtime(true);

$rows = $f();

$end = microtime(true);

$time = $end - $start;

$totalTime += $time;

}

$avg = $totalTime / $i;

printf("$text [ avg ] %1.6f [total] %3.6f \n", $avg, $totalTime);

}

// fetch 测试表(table_name)映射类 ***************需替换***************

class FetchClass {

public $id;

public $name;

public $created_at;

public $updated_at;

}

// ***************select * from table_name, table_name需替换***************

// 1 : 按行读取+返回一个索引为结果集列名的数组

profile("fetch ASSOC", function() use ($pdo) {

$st = $pdo->prepare('select * from table_name');

$st->setFetchMode(PDO::FETCH_ASSOC);

$st->execute();

$rows = [];

while($row = $st->fetch()){

$rows[] = $row;

}

return $rows;

});

// 2 : 按行读取+返回一个属性名对应结果集列名的匿名对象

profile("fetch OBJ ", function() use ($pdo) {

$st = $pdo->prepare('select * from table_name');

$st->setFetchMode(PDO::FETCH_OBJ);

$st->execute();

$rows = [];

while($row = $st->fetch()){

$rows[] = $row;

}

return $rows;

});

// 3 : 按行读取+返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名。如果 fetch_style 包含 PDO::FETCH_CLASSTYPE(例如:PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE),则类名由第一列的值决定

profile("fetch CLASS", function() use ($pdo){

$st = $pdo->prepare('select * from table_name');

$st->setFetchMode(PDO::FETCH_CLASS, 'FetchClass');

$st->execute();

$rows = [];

while($row = $st->fetch()){

$rows[] = $row;

}

return $rows;

});

// 4 : 按行读取+更新一个被请求类已存在的实例,映射结果集中的列到类中命名的属性

profile("fetch INTO ", function() use ($pdo){

$st = $pdo->prepare('select * from table_name');

$fetchCls = new FetchClass;

$st->setFetchMode(PDO::FETCH_INTO, $fetchCls);

$st->execute();

$rows = [];

while($row = $st->fetch()){

$rows[] = clone $row;

}

return $rows;

});

// 5 : 全部读取+返回一个索引为结果集列名的数组

profile("fetchAll ASSOC", function() use ($pdo) {

$st = $pdo->prepare('select * from table_name');

$st->setFetchMode(PDO::FETCH_ASSOC);

$st->execute();

$rows = $st->fetchAll();

return $rows;

});

// 6 : 全部读取+返回一个属性名对应结果集列名的匿名对象

profile("fetchAll OBJ ", function() use ($pdo) {

$st = $pdo->prepare('select * from table_name');

$st->setFetchMode(PDO::FETCH_OBJ);

$st->execute();

$rows = $st->fetchAll();

return $rows;

});

// 7 : 全部读取+返回一个请求类的新实例,映射结果集中的列名到类中对应的属性名

profile("fetchall CLASS", function() use ($pdo){

$st = $pdo->prepare('select * from table_name');

$st->setFetchMode(PDO::FETCH_CLASS, 'FetchClass');

$st->execute();

$rows = $st->fetchAll();

return $rows;

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的HTML+PHP+MySQL+PDO登录注册示例: 1.创建数据库和表 首先,我们需要创建一个名为“test”的数据库和一个名为“users”的表,该表将存储用户的用户名和密码。 ```sql CREATE DATABASE test; USE test; CREATE TABLE users ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL, password VARCHAR(30) NOT NULL ); ``` 2.注册页面 在注册页面中,我们将显示一个表单,要求用户输入用户名和密码。当用户提交表单时,我们将使用PDO将用户提供的数据插入到数据库中。 ```html <!DOCTYPE html> <html> <head> <title>注册</title> </head> <body> <h1>注册</h1> <form method="post" action="register.php"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <input type="submit" value="注册"> </form> </body> </html> ``` 3.注册处理 在register.php文件中,我们将获取用户提交的表单数据,并使用PDO将其插入到数据库中。 ```php <?php $dsn = 'mysql:host=localhost;dbname=test'; $username = 'root'; $password = ''; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $username = $_POST['username']; $password = $_POST['password']; $stmt = $pdo->prepare('INSERT INTO users (username, password) VALUES (:username, :password)'); $stmt->execute(array( ':username' => $username, ':password' => $password )); echo '注册成功!'; } } catch(PDOException $e) { echo '注册失败: ' . $e->getMessage(); } ?> ``` 4.登录页面 在登录页面中,我们将显示一个表单,要求用户输入他们的用户名和密码。当用户提交表单时,我们将使用PDO检查数据库中是否存在该用户,并根据结果显示相应的消息。 ```html <!DOCTYPE html> <html> <head> <title>登录</title> </head> <body> <h1>登录</h1> <form method="post" action="login.php"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html> ``` 5.登录处理 在login.php文件中,我们将获取用户提交的表单数据,并使用PDO检查数据库中是否存在该用户。如果用户存在,则将其重定向到受保护的页面。否则,我们将显示一个错误消息。 ```php <?php $dsn = 'mysql:host=localhost;dbname=test'; $username = 'root'; $password = ''; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $username = $_POST['username']; $password = $_POST['password']; $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password'); $stmt->execute(array( ':username' => $username, ':password' => $password )); if ($stmt->rowCount() > 0) { header('Location: protected.php'); exit; } else { echo '用户名或密码错误!'; } } } catch(PDOException $e) { echo '登录失败: ' . $e->getMessage(); } ?> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值