国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

文字

PDO 對象常用方法

PDO 對象方法

方法描述
exec()執(zhí)行一條 SQL 語句,并返回其受影響的行數(shù),如果沒有受影響的行數(shù)則返回 0
query()執(zhí)行一條 SQL 語句,返回一個 PDOStatement 對象
prepare()準備要執(zhí)行的 SQL 語句,返回 PDOStatement 對象
quote()返回一個添加引號的字符串,用于 SQL 語句中
lastInertId返回最后插入的行的ID
setAttribute()設置數(shù)據(jù)庫連接屬性
getAttribute()獲取數(shù)據(jù)庫連接屬性
errorCode()獲取跟數(shù)據(jù)庫句柄上一次操作相關的 SQLSTATE
errorInfo()獲取跟數(shù)據(jù)庫句柄上一次操作的錯誤信息

PDOStatement 對象方法

方法描述
execute()執(zhí)行一條預處理語句
rowCount()返回上一個 SQL 語句影響的行數(shù)
fetch()從結果集中獲取一行
fetchAll()返回一個包含結果集中所有行的數(shù)組
setFetchMode()為語句設置默認的獲取模式
fetchColumn()從結果集下一行返回單獨的行
fetchObject()獲取下一行并作為一個對象返回
bindParam()綁定一個參數(shù)到指定的變量名
bindValue()把一個值綁定到一個參數(shù)
bindColumn()綁定一列到一個 PHP 變量
getColumnMeta()返回結果集中一列的元數(shù)據(jù)
columnCount()返回結果集中的列數(shù)
setAttribute()設置一個語句屬性
getAttribute獲取一個語句屬性
errorCode()獲取跟上一個語句句柄操作相關的SQLSTATE
errorInfo()獲取跟上一個語句句柄操作相關的拓展錯誤信息
debugDumpParams()打印一條 SQL 預處理命令
nextRowset()在一個多行集語句句柄中推進到下一個行集

exec() 方法

exec() 寫入

exec() 方法可以用來執(zhí)行數(shù)據(jù)庫的 INSERT 、UPDATE、DELETE操作。并且不支持 SELECT 相關操作

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"));
    // 建表 SQL
    $sql = <<<EOF
        CREATE TABLE IF NOT EXISTS user(
            id INT UNSIGNED NOT NULL AUTO_INCREMENT,
            username VARCHAR(20) NOT NULL UNIQUE,
            password CHAR(32) NOT NULL,
            email VARCHAR(30) NOT NULL,
            PRIMARY KEY (id)
        )ENGINE=InnoDB DEFAULT CHARSET UTF8;
EOF;
    $pdo->exec($sql); // 使用 PDO 對象的 exec()方法執(zhí)行建表語句
    // 寫入 SQL 語句
    $rand = mt_rand(0, 999);
    $sql = sprintf('INSERT INTO user (username, password, email) VALUES ("%s","%s","%s")', 'user' . $rand, md5($rand), 'email' . $rand . '@163.com');
    $pdo->exec($sql); // 執(zhí)行成功,返回 int(1)
    $pdo->lastInsertId(); // 返回最后寫入的主鍵值,即主鍵的自增值
    // 一次寫入多條
    $arr = [
        ['username' => 'username' . mt_rand(0, 999), 'password' => md5(mt_rand(0, 999)), 'email' => 'email' . mt_rand(0, 999) . '@outlook.com'],
        ['username' => 'username' . mt_rand(0, 999), 'password' => md5(mt_rand(0, 999)), 'email' => 'email' . mt_rand(0, 999) . '@icloud.com'],
        ['username' => 'username' . mt_rand(0, 999), 'password' => md5(mt_rand(0, 999)), 'email' => 'email' . mt_rand(0, 999) . '@163.com'],
    ];
    $sql = 'INSERT INTO user (username, password, email) VALUES ';
    foreach ($arr as $v) {
        $sql .= "('{$v['username']}', '{$v['password']}', '{$v['email']}'),";
    }
    $sql = rtrim($sql, ',');
    $pdo->exec($sql); // 返回受影響行數(shù) int(3)
} catch (PDOException $e) {
    echo $e->getMessage();
}

執(zhí)行 pdo 對象的 exec() 方法返回受影響的行數(shù)、0[例如上例執(zhí)行創(chuàng)建表的語句返回 0 ] 或者 false [當 SQL 語句錯誤,使用 errorInfo() 方法獲取錯誤信息。]

exec() 更新與刪除

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"));
    // 更新
    $sql = "UPDATE user SET username='user1' where id = 1;";
    $pdo->exec($sql); // 返回受影響行數(shù)
    // 刪除
    $sql = 'DELETE FROM user where id = 1;';
    $pdo->exec($sql); // 返回受影響的行數(shù)
    // 執(zhí)行 SELECT 操作
    $sql = 'SELECT * FROM user;';
    $pdo->exec($sql); // 返回 int(0)
} catch (PDOException $e) {
    echo $e->getMessage();
}

不允許使用 exec() 進行 SELECT 操作。

query() 查詢

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"));
    $sql = 'SELECT * FROM user where id = 2';
    $res = $pdo->query($sql); // object(PDOStatement)#2 (1) { ["queryString"]=> string(31) "SELECT * FROM user where id = 2" }
    // 通過 foreach 遍歷對象
    foreach ($res as $row) {
        print_r($row);
    }
} catch (PDOException $e) {
    echo $e->getMessage();
}

設置數(shù)據(jù)庫連接屬性

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $options = [PDO::ATTR_AUTOCOMMIT => 0];
    $pdo = new PDO($dsn, $username, $passwd, $options); // 實例化 PDO 對象時傳入屬性
    /**
     * PDO::ATTR_AUTOCOMMIT 自動提交
     * PDO::ATTR_CASE 字段名大小寫
     * PDO::ATTR_CLIENT_VERSION 客戶端版本
     * PDO::ATTR_CONNECTION_STATUS 連接狀態(tài)信息
     * PDO::ATTR_DRIVER_NAME
     * PDO::ATTR_ERRMODE 錯誤處理模式
     * PDO::ATTR_ORACLE_NULLS 空字符串轉換成SQL時的 Null
     * PDO::ATTR_PERSISTENT
     * PDO::ATTR_PREFETCH
     * PDO::ATTR_SERVER_INFO 服務器信息
     * PDO::ATTR_SERVER_VERSION 服務器版本
     * PDO::ATTR_TIMEOUT 超時時間
     */
    $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT); // 獲取連接屬性值
    $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); // 設置連接屬性
} catch (PDOException $e) {
    echo $e->getMessage();
}

錯誤信息

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"));
    $sql = 'SELECT * FROM users'; // 表名不正確
    $res = $pdo->exec($sql);
    if ($res === false) {
        echo $pdo->errorCode(); // 返回SQLSTATE的值 42S02
        print_r($pdo->errorInfo()); // 返回錯誤信息的數(shù)組,[0=>'SQLSTATE值', 1=>'錯誤碼', 2=>'錯誤提示'],Array ( [0] => 42S02 [1] => 1146 [2] => Table 'test.users' doesn't exist )
    }
} catch (PDOException $e) {
    echo $e->getMessage();
}

quote() 防止 SQL 注入

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實例化 PDO 對象時傳入屬性
    $username = ' or 1 = 1 #';
    // $pdo->quote('username');
    $pdo->quote($username); // quote() 過濾 SQL 字符串中特殊字符
    $sql = "SELECT * FROM user where username = '{$username}'";
    $pdo->query($sql);
} catch (PDOException $e) {
    echo $e->getMessage();
}

使用 quote() 方法會轉移特殊字符,防止SQL注入,但是不建議這樣操作。

預處理查詢

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"));
    $sql = "SELECT * FROM user";
    // 準備一條 SQL 語句
    $res = $pdo->prepare($sql); // object(PDOStatement)#2 (1) { ["queryString"]=> string(43) "SELECT * FROM user where username='user291'" }
    // execute() 執(zhí)行 SQL 語句
    $r = $res->execute(); // 返回 boolean
    $res->setFetchMode(PDO::FETCH_ASSOC); // 設置返回數(shù)據(jù)的格式
    // $res->fetchAll();
    if ($r) {
        while ($row = $res->fetch(PDO::FETCH_ASSOC)) { // 獲取結果集中一條數(shù)據(jù) PDO::FETCH_ASSOC 參數(shù)返回關聯(lián)數(shù)組
            var_dump($row);
        }
    }
} catch (PDOException $e) {
    echo $e->getMessage();
}

預處理語句中占位符的使用

  • 在調(diào)用

    execute()

    的時候傳入對應的值,進行語句的預處理。

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實例化 PDO 對象時傳入屬性
    $username = ' or 1 = 1 #'; // 'username430'
    $sql = "SELECT * FROM user where username = :username"; // 不用給字符串 :username 加上引號
    $res = $pdo->prepare($sql); // prepare() 過濾 SQL 字符串中特殊字符
    $res->execute([':username' => $username]);
} catch (PDOException $e) {
    echo $e->getMessage();
}
  • 使用

    ?

    占位符,預處理完 SQL 后使用

    excute()

    的時候,相當于傳遞一個索引數(shù)組。

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實例化 PDO 對象時傳入屬性
    $username = 'username430';// ' or 1 = 1 #'; // 'username430'
    $sql = "SELECT * FROM user where username = ?"; // 不用給字符串 :username 加上引號
    $res = $pdo->prepare($sql); // prepare() 過濾 SQL 字符串中特殊字符
    $res->execute([$username]);
    var_dump($res->rowCount());
} catch (PDOException $e) {
    echo $e->getMessage();
}
  • bindParam()

    方法綁定參數(shù)

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實例化 PDO 對象時傳入屬性
    $sql = 'INSERT INTO user (username, password, email) VALUES (:username, :password, :email)';
    $statement = $pdo->prepare($sql); // 預執(zhí)行SQL
    $statement->bindParam(':username', $username, PDO::PARAM_STR); // 綁定參數(shù) :username
    $statement->bindParam(':password', $password, PDO::PARAM_STR);
    $statement->bindParam(':email', $email, PDO::PARAM_STR);
    // 參數(shù)賦值
    $rand = mt_rand(0, 999);
    $username = 'username' . $rand;
    $password = md5($rand);
    $email = $username . '@qq.com';
    $statement->execute();
} catch (PDOException $e) {
    echo $e->getMessage();
}

bindValue() 將值綁定到參數(shù)

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實例化 PDO 對象時傳入屬性
    $sql = 'INSERT INTO user (username, password, email) VALUES (:username, :password, :email)';
    $statement = $pdo->prepare($sql);
    $rand = mt_rand(0, 999);
    $username = 'username' . $rand;
    $password = md5($rand);
    $statement->bindValue(':username', $username);
    $statement->bindValue(':password',$password);
    $statement->bindValue(':email',$rand . '@126.com');
    $statement->execute();
    echo $statement->rowCount();
    // 再次綁定值,但是 email 字段使用上面的值
    $rand = mt_rand(0, 999);
    $username = 'username' . $rand;
    $password = md5($rand);
    $statement->bindValue(':username', $username);
    $statement->bindValue(':password',$password);
    $statement->execute();
    echo $statement->rowCount();
} catch (PDOException $e) {
    echo $e->getMessage();
}

注意: 賦值的 $username$password 的賦值要在 bindValue() 之前。

bindColum() 綁定參數(shù)到列

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實例化 PDO 對象時傳入屬性
    $sql = 'SELECT username,password,email FROM user';
    $statement = $pdo->prepare($sql);
    $statement->execute();
    $statement->columnCount(); // 獲取結果集中列數(shù)
    $statement->bindColumn(1, $username);
    $statement->bindColumn(2, $password);
    $statement->bindColumn(3, $email);
    while ($statement->fetch(PDO::FETCH_BOUND)) {
        echo 'username:',$username,',password:',$password,',email:',$email;
    }

} catch (PDOException $e) {
    echo $e->getMessage();
}

fetchColumn() 從結果集下一行返回單獨的行

<?php

try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實例化 PDO 對象時傳入屬性
    $sql = 'SELECT username,password,email FROM user';
    $statement = $pdo->prepare($sql);
    $statement->execute();
    echo $statement->fetchColumn();
    echo $statement->fetchColumn(2); // 獲取第 2 行的 password 字段值
} catch (PDOException $e) {
    echo $e->getMessage();
}

debugDumpParams() 打印預處理語句

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實例化 PDO 對象時傳入屬性
    $sql = 'SELECT username,password,email FROM user WHERE id > :id';
    $statement = $pdo->prepare($sql);
    $statement->bindParam(':id', $id, PDO::PARAM_INT);
    $id = 10;
    $statement->execute();
    print_r($statement->debugDumpParams());
} catch (PDOException $e) {
    echo $e->getMessage();
}


上一篇: 下一篇: