PHP Insert Data Into MySQL

Toggle navigation
TUTORIAL HOME
PHP Insert Data Into MySQL
❮ Previous Next ❯
Insert Data Into MySQL Using MySQLi and PDO
After a database and a table have been created, we can start adding data in them.

Here are some syntax rules to follow:

The SQL query must be quoted in PHP
String values inside the SQL query must be quoted
Numeric values must not be quoted
The word NULL must not be quoted
The INSERT INTO statement is used to add new records to a MySQL table:

INSERT INTO table_name (column1, column2, column3,…)
VALUES (value1, value2, value3,…)
To learn more about SQL, please visit our SQL tutorial.

In the previous chapter we created an empty table named “MyGuests” with five columns: “id”, “firstname”, “lastname”, “email” and “reg_date”. Now, let us fill the table with data.

Note: If a column is AUTO_INCREMENT (like the “id” column) or TIMESTAMP (like the “reg_date” column), it is no need to be specified in the SQL query; MySQL will automatically add the value.

The following examples add a new record to the “MyGuests” table:

Example (MySQLi Object-oriented)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);
}

$sql = “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘John’, ‘Doe’, ‘john@example.com‘)”;

if ($conn->query($sql) === TRUE) {
    echo “New record created successfully”;
} else {
    echo “Error: ” . $sql . “
” . $conn->error;
}

$conn->close();
?>

Example (MySQLi Procedural)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die(“Connection failed: ” . mysqli_connect_error());
}

$sql = “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘John’, ‘Doe’, ‘john@example.com‘)”;

if (mysqli_query($conn, $sql)) {
    echo “New record created successfully”;
} else {
    echo “Error: ” . $sql . “
” . mysqli_error($conn);
}

mysqli_close($conn);
?>

Example (PDO)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDBPDO”;

try {
    $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = “INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (‘John’, ‘Doe’, ‘john@example.com‘)”;
    // use exec() because no results are returned
    $conn->exec($sql);
    echo “New record created successfully”;
    }
catch(PDOException $e)
    {
    echo $sql . “
” . $e->getMessage();
    }

$conn = null;
?>

❮ Previous Next ❯

PHP Get ID of Last Inserted Record

Toggle navigation
TUTORIAL HOME
PHP Get ID of Last Inserted Record
❮ Previous Next ❯
Get ID of The Last Inserted Record
If we perform an INSERT or UPDATE on a table with an AUTO_INCREMENT field, we can get the ID of the last inserted/updated record immediately.

In the table “MyGuests”, the “id” column is an AUTO_INCREMENT field:

CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)
The following examples are equal to the examples from the previous page (PHP Insert Data Into MySQL), except that we have added one single line of code to retrieve the ID of the last inserted record. We also echo the last inserted ID:

Example (MySQLi Object-oriented)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);
}

$sql = “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘John’, ‘Doe’, ‘john@example.com‘)”;

if ($conn->query($sql) === TRUE) {
    $last_id = $conn->insert_id;
    echo “New record created successfully. Last inserted ID is: ” . $last_id;
} else {
    echo “Error: ” . $sql . “
” . $conn->error;
}

$conn->close();
?>

Example (MySQLi Procedural)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die(“Connection failed: ” . mysqli_connect_error());
}

$sql = “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘John’, ‘Doe’, ‘john@example.com‘)”;

if (mysqli_query($conn, $sql)) {
    $last_id = mysqli_insert_id($conn);
    echo “New record created successfully. Last inserted ID is: ” . $last_id;
} else {
    echo “Error: ” . $sql . “
” . mysqli_error($conn);
}

mysqli_close($conn);
?>

Example (PDO)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDBPDO”;

try {
    $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = “INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (‘John’, ‘Doe’, ‘john@example.com‘)”;
    // use exec() because no results are returned
    $conn->exec($sql);
    $last_id = $conn->lastInsertId();
    echo “New record created successfully. Last inserted ID is: ” . $last_id;
    }
catch(PDOException $e)
    {
    echo $sql . “
” . $e->getMessage();
    }

$conn = null;
?>

❮ Previous Next ❯

PHP Insert Multiple Records Into MySQL

PHP Insert Multiple Records Into MySQL
❮ Previous Next ❯
Insert Multiple Records Into MySQL Using MySQLi and PDO
Multiple SQL statements must be executed with the mysqli_multi_query() function.

The following examples add three new records to the “MyGuests” table:

Example (MySQLi Object-oriented)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);
}

$sql = “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘John’, ‘Doe’, ‘john@example.com‘);”;
$sql .= “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘Mary’, ‘Moe’, ‘mary@example.com‘);”;
$sql .= “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘Julie’, ‘Dooley’, ‘julie@example.com‘)”;

if ($conn->multi_query($sql) === TRUE) {
    echo “New records created successfully”;
} else {
    echo “Error: ” . $sql . “
” . $conn->error;
}

$conn->close();
?>

Note that each SQL statement must be separated by a semicolon.

Example (MySQLi Procedural)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die(“Connection failed: ” . mysqli_connect_error());
}

$sql = “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘John’, ‘Doe’, ‘john@example.com‘);”;
$sql .= “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘Mary’, ‘Moe’, ‘mary@example.com‘);”;
$sql .= “INSERT INTO MyGuests (firstname, lastname, email)
VALUES (‘Julie’, ‘Dooley’, ‘julie@example.com‘)”;

if (mysqli_multi_query($conn, $sql)) {
    echo “New records created successfully”;
} else {
    echo “Error: ” . $sql . “
” . mysqli_error($conn);
}

mysqli_close($conn);
?>

The PDO way is a little bit different:

Example (PDO)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDBPDO”;

try {
    $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // begin the transaction
    $conn->beginTransaction();
    // our SQL statements
    $conn->exec(“INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (‘John’, ‘Doe’, ‘john@example.com‘)”);
    $conn->exec(“INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (‘Mary’, ‘Moe’, ‘mary@example.com‘)”);
    $conn->exec(“INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (‘Julie’, ‘Dooley’, ‘julie@example.com‘)”);

    // commit the transaction
    $conn->commit();
    echo “New records created successfully”;
    }
catch(PDOException $e)
    {
    // roll back the transaction if something failed
    $conn->rollback();
    echo “Error: ” . $e->getMessage();
    }

$conn = null;
?>

❮ Previous Next ❯

PHP Prepared Statements

Toggle navigation

TUTORIAL HOME
PHP Prepared Statements
❮ Previous Next ❯
Prepared statements are very useful against SQL injections.

Prepared Statements and Bound Parameters
A prepared statement is a feature used to execute the same (or similar) SQL statements repeatedly with high efficiency.

Prepared statements basically work like this:

Prepare: An SQL statement template is created and sent to the database. Certain values are left unspecified, called parameters (labeled “?”). Example: INSERT INTO MyGuests VALUES(?, ?, ?)
The database parses, compiles, and performs query optimization on the SQL statement template, and stores the result without executing it
Execute: At a later time, the application binds the values to the parameters, and the database executes the statement. The application may execute the statement as many times as it wants with different values
Compared to executing SQL statements directly, prepared statements have three main advantages:

Prepared statements reduces parsing time as the preparation on the query is done only once (although the statement is executed multiple times)
Bound parameters minimize bandwidth to the server as you need send only the parameters each time, and not the whole query
Prepared statements are very useful against SQL injections, because parameter values, which are transmitted later using a different protocol, need not be correctly escaped. If the original statement template is not derived from external input, SQL injection cannot occur.
Prepared Statements in MySQLi
The following example uses prepared statements and bound parameters in MySQLi:

Example (MySQLi with Prepared Statements)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare(“INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)”);
$stmt->bind_param(“sss”, $firstname, $lastname, $email);

// set parameters and execute
$firstname = “John”;
$lastname = “Doe”;
$email = “john@example.com“;
$stmt->execute();

$firstname = “Mary”;
$lastname = “Moe”;
$email = “mary@example.com“;
$stmt->execute();

$firstname = “Julie”;
$lastname = “Dooley”;
$email = “julie@example.com“;
$stmt->execute();

echo “New records created successfully”;

$stmt->close();
$conn->close();
?>

Code lines to explain from the example above:

“INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)”
In our SQL, we insert a question mark (?) where we want to substitute in an integer, string, double or blob value.

Then, have a look at the bind_param() function:

$stmt->bind_param(“sss”, $firstname, $lastname, $email);
This function binds the parameters to the SQL query and tells the database what the parameters are. The “sss” argument lists the types of data that the parameters are. The s character tells mysql that the parameter is a string.

The argument may be one of four types:

i – integer
d – double
s – string
b – BLOB
We must have one of these for each parameter.

By telling mysql what type of data to expect, we minimize the risk of SQL injections.

Note: If we want to insert any data from external sources (like user input), it is very important that the data is sanitized and validated.

Prepared Statements in PDO
The following example uses prepared statements and bound parameters in PDO:

Example (PDO with Prepared Statements)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDBPDO”;

try {
    $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare(“INSERT INTO MyGuests (firstname, lastname, email)
    VALUES (:firstname, :lastname, :email)”);
    $stmt->bindParam(‘:firstname’, $firstname);
    $stmt->bindParam(‘:lastname’, $lastname);
    $stmt->bindParam(‘:email’, $email);

    // insert a row
    $firstname = “John”;
    $lastname = “Doe”;
    $email = “john@example.com“;
    $stmt->execute();

    // insert another row
    $firstname = “Mary”;
    $lastname = “Moe”;
    $email = “mary@example.com“;
    $stmt->execute();

    // insert another row
    $firstname = “Julie”;
    $lastname = “Dooley”;
    $email = “julie@example.com“;
    $stmt->execute();

    echo “New records created successfully”;
    }
catch(PDOException $e)
    {
    echo “Error: ” . $e->getMessage();
    }
$conn = null;
?>

❮ Previous Next ❯

PHP Select Data From MySQL

Toggle navigation

TUTORIAL HOME
PHP Select Data From MySQL
❮ Previous Next ❯
Select Data From a MySQL Database
The SELECT statement is used to select data from one or more tables:

SELECT column_name(s) FROM table_name
or we can use the * character to select ALL columns from a table:

SELECT * FROM table_name
To learn more about SQL, please visit our SQL tutorial.

Select Data With MySQLi
The following example selects the id, firstname and lastname columns from the MyGuests table and displays it on the page:

Example (MySQLi Object-oriented)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);
}

$sql = “SELECT id, firstname, lastname FROM MyGuests”;
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo “id: ” . $row[“id”]. ” – Name: ” . $row[“firstname”]. ” ” . $row[“lastname”]. “
“;
    }
} else {
    echo “0 results”;
}
$conn->close();
?>
Code lines to explain from the example above:

First, we set up an SQL query that selects the id, firstname and lastname columns from the MyGuests table. The next line of code runs the query and puts the resulting data into a variable called $result.

Then, the function num_rows() checks if there are more than zero rows returned.

If there are more than zero rows returned, the function fetch_assoc() puts all the results into an associative array that we can loop through. The while() loop loops through the result set and outputs the data from the id, firstname and lastname columns.

The following example shows the same as the example above, in the MySQLi procedural way:

Example (MySQLi Procedural)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die(“Connection failed: ” . mysqli_connect_error());
}

$sql = “SELECT id, firstname, lastname FROM MyGuests”;
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        echo “id: ” . $row[“id”]. ” – Name: ” . $row[“firstname”]. ” ” . $row[“lastname”]. “
“;
    }
} else {
    echo “0 results”;
}

mysqli_close($conn);
?>
You can also put the result in an HTML table:

Example (MySQLi Object-oriented)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);
}

$sql = “SELECT id, firstname, lastname FROM MyGuests”;
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo “

“;
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo “

<td>”.$row[“firstname”].” “.$row[“lastname”].”

“;
    }
    echo “

ID Name
“.$row[“id”].”

“;
} else {
    echo “0 results”;
}
$conn->close();
?>
Select Data With PDO (+ Prepared Statements)
The following example uses prepared statements.

It selects the id, firstname and lastname columns from the MyGuests table and displays it in an HTML table:

Example (PDO)
<?php
echo “

“;
echo “

“;

class TableRows extends RecursiveIteratorIterator {
    function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
    }

    function current() {
        return “

“;
    }

    function beginChildren() {
        echo “

“;
    }

    function endChildren() {
        echo “

” . “\n”;
    }
}

$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDBPDO”;

try {
    $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare(“SELECT id, firstname, lastname FROM MyGuests”);
    $stmt->execute();

    // set the resulting array to associative
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
        echo $v;
    }
}
catch(PDOException $e) {
    echo “Error: ” . $e->getMessage();
}
$conn = null;
echo “

Id Firstname</th>

Lastname
” . parent::current(). “

“;
?>

❮ Previous Next ❯

PHP Delete Data From MySQL

PHP Delete Data From MySQL


❮ Previous Next ❯
Delete Data From a MySQL Table Using MySQLi and PDO
The DELETE statement is used to delete records from a table:

DELETE FROM table_name
WHERE some_column = some_value
Notice the WHERE clause in the DELETE syntax: The WHERE clause specifies which record or records that should be deleted. If you omit the WHERE clause, all records will be deleted!

To learn more about SQL, please visit our SQL tutorial.

Let’s look at the “MyGuests” table:

id firstname lastname email reg_date
1 John Doe john@example.com 2014-10-22 14:26:15
2 Mary Moe mary@example.com 2014-10-23 10:22:30
3 Julie Dooley julie@example.com 2014-10-26 10:48:23
The following examples delete the record with id=3 in the “MyGuests” table:

Example (MySQLi Object-oriented)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);


// sql to delete a record
$sql = “DELETE FROM MyGuests WHERE id=3”;

if ($conn->query($sql) === TRUE) {
    echo “Record deleted successfully”;
} else {
    echo “Error deleting record: ” . $conn->error;
}

$conn->close();
?>

Example (MySQLi Procedural)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die(“Connection failed: ” . mysqli_connect_error());
}

// sql to delete a record
$sql = “DELETE FROM MyGuests WHERE id=3”;

if (mysqli_query($conn, $sql)) {
    echo “Record deleted successfully”;
} else {
    echo “Error deleting record: ” . mysqli_error($conn);
}

mysqli_close($conn);
?>

Example (PDO)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDBPDO”;

try {
    $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // sql to delete a record
    $sql = “DELETE FROM MyGuests WHERE id=3”;

    // use exec() because no results are returned
    $conn->exec($sql);
    echo “Record deleted successfully”;
    }
catch(PDOException $e)
    {
    echo $sql . “
” . $e->getMessage();

    }

$conn = null;
?>

After the record is deleted, the table will look like this:

id firstname lastname email reg_date
1 John Doe john@example.com 2014-10-22 14:26:15
2 Mary Moe mary@example.com 2014-10-23 10:22:30

❮ Previous Next ❯

PHP Update Data in MySQL

PHP Update Data in MySQL
❮ Previous Next ❯

Update Data In a MySQL Table Using MySQLi and PDO
The UPDATE statement is used to update existing records in a table:

UPDATE table_name
SET column1=value, column2=value2,…
WHERE some_column=some_value
Notice the WHERE clause in the UPDATE syntax: The WHERE clause specifies which record or records that should be updated. If you omit the WHERE clause, all records will be updated!

To learn more about SQL, please visit our SQL tutorial.

Let’s look at the “MyGuests” table:

id firstname lastname email reg_date
1 John Doe john@example.com 2014-10-22 14:26:15
2 Mary Moe mary@example.com 2014-10-23 10:22:30
The following examples update the record with id=2 in the “MyGuests” table:

Example (MySQLi Object-oriented)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);
}

$sql = “UPDATE MyGuests SET lastname=’Doe’ WHERE id=2”;

if ($conn->query($sql) === TRUE) {
    echo “Record updated successfully”;
} else {
    echo “Error updating record: ” . $conn->error;
}

$conn->close();
?>

Example (MySQLi Procedural)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die(“Connection failed: ” . mysqli_connect_error());
}

$sql = “UPDATE MyGuests SET lastname=’Doe’ WHERE id=2”;

if (mysqli_query($conn, $sql)) {
    echo “Record updated successfully”;
} else {
    echo “Error updating record: ” . mysqli_error($conn);
}

mysqli_close($conn);
?>

Example (PDO)
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDBPDO”;

try {
    $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = “UPDATE MyGuests SET lastname=’Doe’ WHERE id=2”;

    // Prepare statement
    $stmt = $conn->prepare($sql);

    // execute the query
    $stmt->execute();

    // echo a message to say the UPDATE succeeded
    echo $stmt->rowCount() . ” records UPDATED successfully”;
    }
catch(PDOException $e)
    {
    echo $sql . “
” . $e->getMessage();
    }

$conn = null;
?>

After the record is updated, the table will look like this:

id firstname lastname email reg_date
1 John Doe john@example.com 2014-10-22 14:26:15
2 Mary Doe mary@example.com 2014-10-23 10:22:30

❮ Previous Next ❯

PHP SimpleXML Parser

Toggle navigation
TUTORIAL HOME
PHP SimpleXML Parser

❮ Previous Next ❯
SimpleXML is a PHP extension that allows us to easily manipulate and get XML data.

The SimpleXML Parser
SimpleXML is a tree-based parser.

SimpleXML provides an easy way of getting an element’s name, attributes and textual content if you know the XML document’s structure or layout.

SimpleXML turns an XML document into a data structure you can iterate through like a collection of arrays and objects.

Compared to DOM or the Expat parser, SimpleXML takes a fewer lines of code to read text data from an element.

Installation
As of PHP 5, the SimpleXML functions are part of the PHP core. No installation is required to use these functions.

PHP SimpleXML – Read From String
The PHP simplexml_load_string() function is used to read XML data from a string.

Assume we have a variable that contains XML data, like this:

$myXMLData =

Tove
Jani
Reminder
Don’t forget me this weekend!
“;
The example below shows how to use the simplexml_load_string() function to read XML data from a string:

Example
<?php
$myXMLData =

Tove
Jani
Reminder
Don’t forget me this weekend!
“;

$xml=simplexml_load_string($myXMLData) or die(“Error: Cannot create object”);
print_r($xml);
?>
The output of the code above will be:

SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder [body] => Don’t forget me this weekend! )
Error Handling Tip: Use the libxml functionality to retrieve all XML errors when loading the document and then iterate over the errors. The following example tries to load a broken XML string:

Example
<?php
libxml_use_internal_errors(true);
$myXMLData =

John Doe
john@example.com</wrongemail>
“;

$xml = simplexml_load_string($myXMLData);
if ($xml === false) {
    echo “Failed loading XML: “;
    foreach(libxml_get_errors() as $error) {
        echo “
“, $error->message;
    }
} else {
    print_r($xml);
}
?>
The output of the code above will be:

Failed loading XML:
Opening and ending tag mismatch: user line 3 and wronguser
Opening and ending tag mismatch: email line 4 and wrongemail
PHP SimpleXML – Read From File
The PHP simplexml_load_file() function is used to read XML data from a file.

Assume we have an XML file called “note.xml”, that looks like this:

  Tove
  Jani
  Reminder
  Don’t forget me this weekend!

The example below shows how to use the simplexml_load_file() function to read XML data from a file:

Example
<?php
$xml=simplexml_load_file(“note.xml”) or die(“Error: Cannot create object”);
print_r($xml);
?>
The output of the code above will be:

SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder [body] => Don’t forget me this weekend! )
Tip: The next chapter shows how to get/retrieve node values from an XML file with SimpleXML!

More PHP SimpleXML
For more information about the PHP SimpleXML functions, visit our PHP SimpleXML Reference.

❮ Previous Next ❯

PHP XML Parsers

PHP XML Parsers
❮ Previous Next ❯
What is XML?

The XML language is a way to structure data for sharing across websites.

Several web technologies like RSS Feeds and Podcasts are written in XML.

XML is easy to create. It looks a lot like HTML, except that you make up your own tags.

If you want to learn more about XML, please visit our XML tutorial.

What is an XML Parser?
To read and update, create and manipulate an XML document, you will need an XML parser.

In PHP there are two major types of XML parsers:

Tree-Based Parsers
Event-Based Parsers
Tree-Based Parsers
Tree-based parsers holds the entire document in Memory and transforms the XML document into a Tree structure. It analyzes the whole document, and provides access to the Tree elements (DOM).

This type of parser is a better option for smaller XML documents, but not for large XML document as it causes major performance issues.

Example of tree-based parsers:

SimpleXML
DOM
Event-Based Parsers
Event-based parsers do not hold the entire document in Memory, instead, they read in one node at a time and allow you to interact with in real time. Once you move onto the next node, the old one is thrown away.

This type of parser is well suited for large XML documents. It parses faster and consumes less memory.

Example of event-based parsers:

XMLReader
XML Expat Parser

❮ Previous Next ❯

PHP SimpleXML – Get Node/Attribute Values

Toggle navigation
TUTORIAL HOME
PHP SimpleXML – Get Node/Attribute Values

❮ Previous Next ❯
SimpleXML is a PHP extension that allows us to easily manipulate and get XML data.

PHP SimpleXML – Get Node Values
Get the node values from the “note.xml” file:

Example
<?php
$xml=simplexml_load_file(“note.xml”) or die(“Error: Cannot create object”);
echo $xml->to . “
“;
echo $xml->from . “
“;
echo $xml->heading . “
“;
echo $xml->body;
?>
The output of the code above will be:

Tove
Jani
Reminder
Don’t forget me this weekend!
Another XML File
Assume we have an XML file called “books.xml”, that looks like this:

 
    Everyday Italian
    Giada De Laurentiis
    2005
    30.00
 
 
    Harry Potter
    J K. Rowling
    2005
    29.99
 
 
    XQuery Kick Start
    James McGovern
    2003
    49.99
 
 
    Learning XML
    Erik T. Ray
    2003
    39.95
 

PHP SimpleXML – Get Node Values of Specific Elements
The following example gets the node value of the element in the first and second elements in the “books.xml” file:

Example
<?php
$xml=simplexml_load_file(“books.xml”) or die(“Error: Cannot create object”);
echo $xml->book[0]->title . “
“;
echo $xml->book[1]->title;
?>
The output of the code above will be:

Everyday Italian
Harry Potter
PHP SimpleXML – Get Node Values – Loop
The following example loops through all the elements in the “books.xml” file, and gets the node values of the , , , and elements:

Example
<?php
$xml=simplexml_load_file(“books.xml”) or die(“Error: Cannot create object”);
foreach($xml->children() as $books) {
    echo $books->title . “, “;
    echo $books->author . “, “;
    echo $books->year . “, “;
    echo $books->price . “
“;
}
?>
The output of the code above will be:

Everyday Italian, Giada De Laurentiis, 2005, 30.00
Harry Potter, J K. Rowling, 2005, 29.99
XQuery Kick Start, James McGovern, 2003, 49.99
Learning XML, Erik T. Ray, 2003, 39.95
PHP SimpleXML – Get Attribute Values
The following example gets the attribute value of the “category” attribute of the first element and the attribute value of the “lang” attribute of the element in the second element:

Example
<?php
$xml=simplexml_load_file(“books.xml”) or die(“Error: Cannot create object”);
echo $xml->book[0][‘category’] . “
“;
echo $xml->book[1]->title[‘lang’];
?>
The output of the code above will be:

COOKING
en
PHP SimpleXML – Get Attribute Values – Loop
The following example gets the attribute values of the elements in the “books.xml” file:

Example
<?php
$xml=simplexml_load_file(“books.xml”) or die(“Error: Cannot create object”);
foreach($xml->children() as $books) {
    echo $books->title[‘lang’];
    echo “
“;
}
?>
The output of the code above will be:

en
en
en-us
en-us
More PHP SimpleXML
For more information about the PHP SimpleXML functions, visit our PHP SimpleXML Reference.

❮ Previous Next ❯