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

directory search
前言 MySQL的使用 MySQL多表同時(shí)刪除方案 MySQL跨表、多表更新SQL語(yǔ)句總結(jié) MySQL存儲(chǔ)引擎 安裝 常規(guī)方式編譯安裝MySQL 采用cmake方式編譯安裝MySQL 使用rpm包安裝MySQL 使用yum方式安裝MySQL 采用二進(jìn)制方式免編譯安裝MySQL 多實(shí)例的安裝 什么是多實(shí)例 多實(shí)例的作用、問(wèn)題以及應(yīng)用場(chǎng)景 多實(shí)例安裝01【推薦】 多實(shí)例官方安裝方案02 啟動(dòng)、用戶和權(quán)限管理 單實(shí)例MySQL的啟動(dòng)和關(guān)閉的方法 設(shè)置及修改MySQL root用戶密碼 找回丟失的MySQL root用戶密碼 創(chuàng)建MySQL用戶及用戶權(quán)限管理 基礎(chǔ)命令的操作 MySQL庫(kù)和表相關(guān)操作 MySQL中的索引操作 MySQL常用命令 MySQL的錯(cuò)誤代碼 MySQL復(fù)習(xí)秘籍 備份與恢復(fù) 備份 恢復(fù) mysqlbinlog命令 服務(wù)日志 主從復(fù)制 主從復(fù)制部署配置問(wèn)題匯總 主從復(fù)制讀寫(xiě)分離 災(zāi)難恢復(fù) 配置phpmyadmin連接多實(shí)例MySQL MySQL語(yǔ)句大全 用戶創(chuàng)建、權(quán)限、刪除 數(shù)據(jù)庫(kù)與表顯示、創(chuàng)建、刪除 Mysql表復(fù)制及備份還原 數(shù)據(jù)庫(kù)表中數(shù)據(jù)操作 修改表中的指定一條數(shù)據(jù) 查詢表 日志 批量修改Mysql表引擎為InnoDB的方法 數(shù)據(jù)庫(kù)抽象層 PDO PDO對(duì)象常用方法 PDO 事務(wù)處理 PDO 與 MySQLi 二者效率簡(jiǎn)單比較 大小寫(xiě)敏感性 lower_case_table_names CentOS7安裝MySQL5.7密碼查看與修改
characters

PDO 對(duì)象常用方法

PDO 對(duì)象方法

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

PDOStatement 對(duì)象方法

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

exec() 方法

exec() 寫(xiě)入

exec() 方法可以用來(lái)執(zhí)行數(shù)據(jù)庫(kù)的 INSERT 、UPDATEDELETE操作。并且不支持 SELECT 相關(guān)操作

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $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 對(duì)象的 exec()方法執(zhí)行建表語(yǔ)句
    // 寫(xiě)入 SQL 語(yǔ)句
    $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(); // 返回最后寫(xiě)入的主鍵值,即主鍵的自增值
    // 一次寫(xiě)入多條
    $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 對(duì)象的 exec() 方法返回受影響的行數(shù)、0[例如上例執(zhí)行創(chuàng)建表的語(yǔ)句返回 0 ] 或者 false [當(dāng) SQL 語(yǔ)句錯(cuò)誤,使用 errorInfo() 方法獲取錯(cuò)誤信息。]

exec() 更新與刪除

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $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() 進(jìn)行 SELECT 操作。

query() 查詢

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $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" }
    // 通過(guò) foreach 遍歷對(duì)象
    foreach ($res as $row) {
        print_r($row);
    }
} catch (PDOException $e) {
    echo $e->getMessage();
}

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

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

錯(cuò)誤信息

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $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()); // 返回錯(cuò)誤信息的數(shù)組,[0=>'SQLSTATE值', 1=>'錯(cuò)誤碼', 2=>'錯(cuò)誤提示'],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ù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實(shí)例化 PDO 對(duì)象時(shí)傳入屬性
    $username = ' or 1 = 1 #';
    // $pdo->quote('username');
    $pdo->quote($username); // quote() 過(guò)濾 SQL 字符串中特殊字符
    $sql = "SELECT * FROM user where username = '{$username}'";
    $pdo->query($sql);
} catch (PDOException $e) {
    echo $e->getMessage();
}

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

預(yù)處理查詢

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

預(yù)處理語(yǔ)句中占位符的使用

  • 在調(diào)用

    execute()

    的時(shí)候傳入對(duì)應(yīng)的值,進(jìn)行語(yǔ)句的預(yù)處理。

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

    ?

    占位符,預(yù)處理完 SQL 后使用

    excute()

    的時(shí)候,相當(dāng)于傳遞一個(gè)索引數(shù)組。

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實(shí)例化 PDO 對(duì)象時(shí)傳入屬性
    $username = 'username430';// ' or 1 = 1 #'; // 'username430'
    $sql = "SELECT * FROM user where username = ?"; // 不用給字符串 :username 加上引號(hào)
    $res = $pdo->prepare($sql); // prepare() 過(guò)濾 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ù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實(shí)例化 PDO 對(duì)象時(shí)傳入屬性
    $sql = 'INSERT INTO user (username, password, email) VALUES (:username, :password, :email)';
    $statement = $pdo->prepare($sql); // 預(yù)執(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ù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實(shí)例化 PDO 對(duì)象時(shí)傳入屬性
    $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ù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實(shí)例化 PDO 對(duì)象時(shí)傳入屬性
    $sql = 'SELECT username,password,email FROM user';
    $statement = $pdo->prepare($sql);
    $statement->execute();
    $statement->columnCount(); // 獲取結(jié)果集中列數(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() 從結(jié)果集下一行返回單獨(dú)的行

<?php

try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實(shí)例化 PDO 對(duì)象時(shí)傳入屬性
    $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() 打印預(yù)處理語(yǔ)句

<?php
try {
    $dsn = 'mysql:host=localhost;dbname=test';
    $username = 'root'; // 數(shù)據(jù)庫(kù)用戶名
    $passwd = 'aaaaaa'; // 數(shù)據(jù)庫(kù)密碼
    $pdo = new PDO($dsn, $username, $passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8")); // 實(shí)例化 PDO 對(duì)象時(shí)傳入屬性
    $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();
}


Previous article: Next article: