PHP中的PDO

來源:互聯網
上載者:User
PDO常用方法:

1、PDO::query()主要用於有記錄結果返回的操作(PDOStatement),特別是select操作。

2、PDO::exec()主要是針對沒有結果集合返回的操作。如insert,update等操作。返回影響行數。

3、PDO::lastInsertId()返回上次插入操作最後一條ID,但要注意:如果用insert into tb(col1,col2) values(v1,v2),(v11,v22)..的方式一次插入多條記錄,lastinsertid()返回的只是第一條(v1,v2)插入時的ID,而不是最後一條記錄插入的記錄ID。

4、PDOStatement::fetch()是用來擷取一條記錄。配合while來遍曆。

5、PDOStatement::fetchAll()是擷取所有記錄集到一個中。

6、PDOStatement::fetchcolumn([int column_indexnum])用於直接存取列,參數column_indexnum是該列在行中的從0開始索引值,但是,這個方法一次只能取得同一行的一列,只要執行一次,就跳到下一行。因此,用於直接存取某一列時較好用,但要遍曆多列就用不上。

7、PDOStatement::rowcount()適用於當用query(“select …”)方法時,擷取記錄的條數。也可以用於預先處理中。$stmt->rowcount();

8、PDOStatement::columncount()適用於當用query(“select …”)方法時,擷取記錄的列數。


註解:

1、選fetch還是fetchall?

用fetchall效率高,減少從資料庫檢索次數,但對於大結果集,用fetchall則給系統帶來很大負擔。資料庫要向WEB前端傳輸量太大反而效率低。

2、fetch()或fetchall()有幾個參數:

mixed pdostatement::fetch([int fetch_style [,int cursor_orientation [,int cursor_offset]]])

array pdostatement::fetchAll(int fetch_style)


fetch_style參數:

1、$row=$rs->fetchAll(PDO::FETCH_BOTH); FETCH_BOTH是預設的,可省,返回關聯和索引。

2、$row=$rs->fetchAll(PDO::FETCH_ASSOC); FETCH_ASSOC參數決定返回的只有關聯陣列。

3、$row=$rs->fetchAll(PDO::FETCH_NUM); 返回索引數組

4、$row=$rs->fetchAll(PDO::FETCH_OBJ); 如果fetch()則返回對象,如果是fetchall(),返回由對象組成的二維數組

/** * 資料庫配置 */$dsn = 'mysql:dbname=test;host=127.0.0.1;port=3306';$username = 'root';$password = '123456';/** * 串連資料庫 */try{    $db = new PDO($dsn, $username, $password);}catch(PDOException $e){    die('fail');}$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);$db->exec("SET CHARACTER SET utf8");/** * 查詢 */$name = 'li';$sql = sprintf("SELECT * FROM %s WHERE name LIKE %s", 'user', $name);$stmt = $db->prepare($sql);$stmt->execute();while($row = $stmt->fetch(PDO::FETCH_ASSOC)){    var_dump($row);}var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));/** * 添加 */$name = 'lilei'; $gender = 0;$sql = sprintf("INSERT INTO %s (name, gender) VALUES (%s, %d)", 'user', $name, $gender);$stmt = $db->prepare($sql);$stmt->execute();echo $db->lastInsertId();/** * 修改 */$id = 1; $name = 'hanmeimei'; $gender = 1;$sql = sprintf("UPDATE %s SET name = %s, gender = %d WHERE id = %d", 'user', $name, $gender, $id);$stmt = $db->prepare($sql);$stmt->execute();echo $stmt->rowCount();/** * 刪除 */$id = 1;$sql = sprintf("DELETE FROM %s WHERE id = %d", 'user', $id);$stmt = $db->prepare($sql);$stmt->execute();echo $stmt->rowCount();/** * 中斷連線 */$dbh=null;exit;
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.