How to use PDO in mysql connection in php _ PHP Tutorial

Source: Internet
Author: User
Use of mysql connection methods in php. In php, mysql connection mode PDO usage details this article mainly introduces various usage methods of mysql connection mode PDO in PHP, which is a personal summary. if you have any omissions, please let me know, detailed instructions on using mysql connection methods in php

This article mainly introduces in detail the various use methods of mysql connection methods in PHP, which is a personal summary. if you have any omissions, please let me know. if you need them, please refer to them.

Common PDO methods:

PDO: query () is mainly used for operations (PDOStatement) that have returned record results, especially select operations.

PDO: exec () is mainly for operations that are not returned by the result set. Such as insert and update. Returns the number of affected rows.
PDO: lastInsertId () returns the last ID of the last insert operation, but note: If you use insert into tb (col1, col2) values (v1, v2), (v11, v22 ).. lastinsertid () returns only the ID of the first (v1, v2) inserted, rather than the ID of the last inserted record.
PDOStatement: fetch () is used to obtain a record. Traverse with while.
PDOStatement: fetchAll () is to obtain all record sets to one.
PDOStatement: fetchcolumn ([int column_indexnum]) is used to directly access a column. the parameter column_indexnum is the value of the column starting from 0 in the row. However, this method can only retrieve one column of the same row at a time. if it is executed once, it will jump to the next row. Therefore, it is easier to directly access a column, but it cannot be used to traverse multiple columns.
PDOStatement: rowcount () is used to obtain the number of records when the query ("select...") method is used. It can also be used in preprocessing. $ Stmt-> rowcount ();
PDOStatement: columncount () is used to obtain the number of columns of records when the query ("select...") method is used.

Note:
1. select fetch or fetchall?
When using a small record set, fetchall is highly efficient, reducing the number of retrieval times from the database. However, for a large result set, using fetchall brings a great burden to the system. The database needs to transmit too much data to the WEB front-end, but the efficiency is low.
2. there are several parameters for fetch () or fetchall:
Mixed pdostatement: fetch ([int fetch_style [, int cursor_orientation [, int cursor_offset])
Array pdostatement: fetchAll (int fetch_style)

Fetch_style parameters:
■ $ Row = $ rs-> fetchAll (PDO: FETCH_BOTH); FETCH_BOTH is the default value, which can be saved and returns associations and indexes.
■ $ Row = $ rs-> fetchAll (PDO: FETCH_ASSOC); the FETCH_ASSOC parameter determines that only the associated array is returned.
■ $ Row = $ rs-> fetchAll (PDO: FETCH_NUM); returns the index array
■ $ Row = $ rs-> fetchAll (PDO: FETCH_OBJ); if fetch () is returned, the object is returned. if fetchall () is returned, a two-dimensional array composed of objects is returned.

The code is as follows:


$ Dbh = new PDO ('MySQL: host = localhost; dbname = access_control ', 'root ','');
$ Dbh-> setAttribute (PDO: ATTR_ERRMODE, PDO: ERRMODE_EXCEPTION );
$ Dbh-> exec ('set names utf8 ');
/* Add */
// $ SQL = "INSERT INTO 'user' SET 'login' =: login AND 'password' =: password ";
$ SQL = "INSERT INTO 'user' ('login', 'password') VALUES (: login,: password )"; $ stmt = $ dbh-> prepare ($ SQL); $ stmt-> execute (array (': login' => 'kevin2 ',': password '=> ''));
Echo $ dbh-> lastinsertid ();
/* Modify */
$ SQL = "UPDATE 'user' SET 'password' =: password WHERE 'user _ id' =: userId ";
$ Stmt = $ dbh-> prepare ($ SQL );
$ Stmt-> execute (array (': userid' => '7',': password' => '4607e782c4d86fd5364d7e4248bb10d9 '));
Echo $ stmt-> rowCount ();
/* Delete */
$ SQL = "DELETE FROM 'user' WHERE 'login' LIKE 'Kevin _ '"; // kevin %
$ Stmt = $ dbh-> prepare ($ SQL );
$ Stmt-> execute ();
Echo $ stmt-> rowCount ();
/* Query */
$ Login = 'Kevin % ';
$ SQL = "SELECT * FROM 'user' WHERE 'login' LIKE: login ";
$ Stmt = $ dbh-> prepare ($ SQL );
$ Stmt-> execute (array (': login' => $ login ));
While ($ row = $ stmt-> fetch (PDO: FETCH_ASSOC )){
Print_r ($ row );
}
Print_r ($ stmt-> fetchAll (PDO: FETCH_ASSOC ));
?>

1. establish a connection

The code is as follows:


$ Dbh = newPDO ('MySQL: host = localhost; port = 3306; dbname = test', $ user, $ pass, array (
PDO: ATTR_PERSISTENT => true
));
?>

Persistent link PDO: ATTR_PERSISTENT => true

2. capture errors

The code is as follows:


Try {
$ Dbh = newPDO ('MySQL: host = localhost; dbname = test', $ user, $ pass );
$ Dbh-> setAttribute (PDO: ATTR_ERRMODE, PDO: ERRMODE_EXCEPTION );
$ Dbh-> exec ("set character set utf8 ");
$ Dbh = null; // disconnect
} Catch (PDOException $ e ){
Print "Error! : ". $ E-> getMessage ()."
";
Die ();
}
?>

3. Transaction

The code is as follows:


Try {
$ Dbh-> setAttribute (PDO: ATTR_ERRMODE, PDO: ERRMODE_EXCEPTION );
$ Dbh-> beginTransaction (); // start the transaction
$ Dbh-> exec ("insertintostaff (id, first, last) values (23, 'job', 'bloggs ')");
$ Dbh-> exec ("insertintosalarychange (id, amount, changedate)
Values (, NOW ())");
$ Dbh-> commit (); // submit the transaction
} Catch (Exception $ e ){
$ Dbh-> rollBack (); // error rollBack
Echo "Failed:". $ e-> getMessage ();
}
?>

4. handle errors

A. silent mode (default mode)

The code is as follows:


$ Dbh-> setAttribute (PDO: ATTR_ERRMODE, PDO: ERRMODE_SILENT); // no error is displayed.
$ Dbh-> setAttribute (PDO: ATTR_ERRMODE, PDO: ERRMODE_WARNING); // displays a warning error and continues execution
$ Dbh-> setAttribute (PDO: ATTR_ERRMODE, PDO: ERRMODE_EXCEPTION); // generates a fatal error, PDOException

The code is as follows:


Try {
$ Dbh = new PDO ($ dsn, $ user, $ password );
$ SQL = 'select * from city where CountryCode =: country ';
$ Dbh-> setAttribute (PDO: ATTR_ERRMODE, PDO: ERRMODE_WARNING );
$ Stmt = $ dbh-> prepare ($ SQL );
$ Stmt-> bindParam (': country', $ country, PDO: PARAM_STR );
$ Stmt-> execute ();
While ($ row = $ stmt-> fetch (PDO: FETCH_ASSOC )){
Print $ row ['name']. "/t ";
}
} // If there is a problem we can handle it here
Catch (PDOException $ e ){
Echo 'pdo Exception Caught .';
Echo 'error with the database:
';
Echo 'SQL Query:', $ SQL;
Echo 'Error: '. $ e-> getMessage ();
}
?>

1. use query ()

The code is as follows:


$ Dbh-> query ($ SQL); when $ SQL contains variables, you can use $ dbh-> quote ($ params); // escape string data
$ SQL = 'select * from city where CountryCode = '. $ dbh-> quote ($ country );
Foreach ($ dbh-> query ($ SQL) as $ row ){
Print $ row ['name']. "/t ";
Print $ row ['countrycode']. "/t ";
Print $ row ['population']. "/n ";
}
?>

2. use prepare, bindParam, and execute [recommended, and can be added, modified, or deleted]

The code is as follows:


$ Dbh-> prepare ($ SQL); generates a PDOStatement object.

PDOStatement-> bindParam ()

PDOStatement-> execute (); // you can put the bound variable here.
?>

3. Transactions

The code is as follows:


Try {
$ Dbh = new PDO ('MySQL: host = localhost; dbname = test', 'root ','');
$ Dbh-> query ('set names utf8 ;');
$ Dbh-> setAttribute (PDO: ATTR_ERRMODE, PDO: ERRMODE_EXCEPTION );
$ Dbh-> beginTransaction ();
$ Dbh-> exec ("Insert INTO 'test'. 'Table' ('name', 'age') VALUES ('Mick', 22 );");
$ Dbh-> exec ("Insert INTO 'test'. 'Table' ('name', 'age') VALUES ('Lily', 29 );");
$ Dbh-> exec ("Insert INTO 'test'. 'Table' ('name', 'age') VALUES ('Susan ', 21 );");
$ Dbh-> commit ();
} Catch (Exception $ e ){
$ Dbh-> rollBack ();
Echo "Failed:". $ e-> getMessage ();
}
?>

The above is all about the usage of pdo in PHP. I hope this article will help you and I hope you will like it.

This article describes in detail how to use the mysql connection method PDO in PHP. it is a personal summary. if you have any omissions, please tell me if you need them...

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.