<?xml version="1.0" encoding="utf-8"?> <!-- $Revision: 310790 $ --> <chapter xml:id="mysqli.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> &reftitle.examples; <section xml:id="mysqli.examples-basic"> <title>MySQLi extension basic examples</title> <para> This example shows how to connect, execute a query, use basic error handling, print resulting rows, and disconnect from a MySQL database. </para> <para> This example uses the freely available Sakila database that can be downloaded from <link xlink:href="&url.mysql.sakila;">dev.mysql.com, as described here</link>. To get this example to work, (a) install sakila and (b) modify the connection variables (host, your_user, your_pass). </para> <example> <title>MySQLi extension overview example</title> <programlisting role="php"> <![CDATA[ <?php // Let's pass in a $_GET variable to our example, in this case // it's aid for actor_id in our Sakila database. Let's make it // default to 1, and cast it to an integer as to avoid SQL injection // and/or related security problems. Handling all of this goes beyond // the scope of this simple example. Example: // http://example.org/script.php?aid=42 if (isset($_GET['aid']) && is_numeric($_GET['aid'])) { $aid = (int) $_GET['aid']; } else { $aid = 1; } // Connecting to and selecting a MySQL database named sakila // Hostname: 127.0.0.1, username: your_user, password: your_pass, db: sakila $mysqli = new mysqli('127.0.0.1', 'your_user', 'your_pass', 'sakila'); // Oh no! A connect_errno exists so the connection attempt failed! if ($mysqli->connect_errno) { // The connection failed. What do you want to do? // You could contact yourself (email?), log the error, show a nice page, etc. // You do not want to reveal sensitive information // Let's try this: echo "Sorry, this website is experiencing problems."; // Something you should not do on a public site, but this example will show you // anyways, is print out MySQL error related information -- you might log this echo "Error: Failed to make a MySQL connection, here is why: \n"; echo "Errno: " . $mysqli->connect_errno . "\n"; echo "Error: " . $mysqli->connect_error . "\n"; // You might want to show them something nice, but we will simply exit exit; } // Perform an SQL query $sql = "SELECT actor_id, first_name, last_name FROM actor WHERE actor_id = $aid"; if (!$result = $mysqli->query($sql)) { // Oh no! The query failed. echo "Sorry, the website is experiencing problems."; // Again, do not do this on a public site, but we'll show you how // to get the error information echo "Error: Our query failed to execute and here is why: \n"; echo "Query: " . $sql . "\n"; echo "Errno: " . $mysqli->errno . "\n"; echo "Error: " . $mysqli->error . "\n"; exit; } // Phew, we made it. We know our MySQL connection and query // succeeded, but do we have a result? if ($result->num_rows === 0) { // Oh, no rows! Sometimes that's expected and okay, sometimes // it is not. You decide. In this case, maybe actor_id was too // large? echo "We could not find a match for ID $aid, sorry about that. Please try again."; exit; } // Now, we know only one result will exist in this example so let's // fetch it into an associated array where the array's keys are the // table's column names $actor = $result->fetch_assoc(); echo "Sometimes I see " . $actor['first_name'] . " " . $actor['last_name'] . " on TV."; // Now, let's fetch five random actors and output their names to a list. // We'll add less error handling here as you can do that on your own now $sql = "SELECT actor_id, first_name, last_name FROM actor ORDER BY rand() LIMIT 5"; if (!$result = $mysqli->query($sql)) { echo "Sorry, the website is experiencing problems."; exit; } // Print our 5 random actors in a list, and link to each actor echo "<ul>\n"; while ($actor = $result->fetch_assoc()) { echo "<li><a href='" . $_SERVER['SCRIPT_FILENAME'] . "?aid=" . $actor['actor_id'] . "'>\n"; echo $actor['first_name'] . ' ' . $actor['last_name']; echo "</a></li>\n"; } echo "</ul>\n"; // The script will automatically free the result and close the MySQL // connection when it exits, but let's just do it anyways $result->free(); $mysqli->close(); ?> ]]> </programlisting> </example> </section> </chapter> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"~/.phpdoc/manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->