Sa

731 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
731
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • beginTransaction() will raise an exception if not supported, regardless of your error mode rollBack is called when the handle is destroyed, to maintain consistency
  • Sa

    1. 1. PHP Features Install PHP Sample Code
    2. 2. Features <ul><li>Performance </li><ul><li>Native C code beats a scripted solution
    3. 3. Takes advantage of latest PHP 5 internals </li></ul><li>Power </li><ul><li>Gives you common DB features as a base
    4. 4. Still be able to access specialist functions </li></ul><li>Easy </li><ul><li>Non-intrusive
    5. 5. Clear </li></ul><li>Runtime extensible </li><ul><li>Drivers can be loaded at runtime </li></ul></ul>
    6. 6. Available Drivers <ul><li>Oracle OCI [PDO_OCI]
    7. 7. ODBC V3, IBM DB2 [PDO_ODBC]
    8. 8. MySQL 3.x [PDO_MYSQL]
    9. 9. Postgres [PDO_PGSQL]
    10. 10. SQLite 3.x [PDO_SQLITE]
    11. 11. Firebird [PDO_FIREBIRD] </li></ul>
    12. 12. Switching it on <ul><li>Need to enable PDO in your php.ini
    13. 13. MUST load PDO first
    14. 14. Unix: </li></ul>extension=pdo.so extension=pdo_XXX.so <ul><li>Windows </li></ul>extension=php_pdo.dll extension=php_pdo_XXX.dll
    15. 15. DSN Aliasing <ul><li>uri:uri </li><ul><li>Specify location of a file containing actual DSN on the first line
    16. 16. Works with streams interface, so remote URLs can work too </li></ul><li>name (with no colon) </li><ul><li>Maps to pdo.dsn. name in your php.ini
    17. 17. pdo.dsn.name=sqlite:/path/to/name.db
    18. 18. $dbh = new PDO(‘name’);
    19. 19. $dbh = new PDO(‘sqlite:/path/to/name.db’); </li></ul><li>Neither of these allows for user/pass (yet!) </li></ul>
    20. 20. Connection management try { $dbh = new PDO($dsn, $user, $pw); } catch (PDOException $e) { echo “connect failed:” . $e->getMessage(); } // use the database here // … // done; release the connection $dbh = null;
    21. 21. Persistent PDO 2 <ul><li>PDO_ODBC supports native connection pooling by default
    22. 22. Likely to be more resource efficient than PDO ‘pconnect’
    23. 23. Can turn it off in php.ini: </li></ul>pdo_odbc.connection_pooling=off <ul><li>Need to restart web server after changing it </li></ul>
    24. 24. Let’s get data $dbh = new PDO($dsn); $stmt = $dbh->prepare( ‘ SELECT * FROM FOO’); $stmt->execute(); while ($row = $stmt->fetch()) { print_r($row); }
    25. 25. Fetch types <ul><li>$stmt->fetch(PDO_FETCH_BOTH) </li><ul><li>Array with numeric and string keys
    26. 26. default option </li></ul><li>PDO_FETCH_NUM </li><ul><li>Array with numeric keys </li></ul><li>PDO_FETCH_ASSOC </li><ul><li>Array with string keys </li></ul><li>PDO_FETCH_OBJ </li><ul><li>$obj->name holds the ‘name’ column from the row </li></ul><li>PDO_FETCH_BOUND </li><ul><li>Just returns true until there are no more rows </li></ul></ul>
    27. 27. Let’s change data $deleted = $dbh->query( “ DELETE FROM FOO WHERE 1”); $changes = $dbh->query( “ UPDATE FOO SET active=1 ” . “WHERE NAME LIKE ‘%joe%’”);
    28. 28. Smarter Queries <ul><li>Quoting is annoying, but essential
    29. 29. PDO offers a better way </li></ul>$stmt->prepare(‘INSERT INTO CREDITS (extension, name) VALUES (:extension, :name)’); $stmt->execute(array( ‘ :extension’ => ‘xdebug’, ‘ :name’ => ‘Derick Rethans’ ));
    30. 30. PDO_ATTR_CASE <ul><li>Some databases (notably, Oracle) insist on returning column names in uppercase </li></ul>$dbh->setAttribute(PDO_ATTR_CASE, PDO_CASE_UPPER); $stmt = $dbh->prepare( &quot;SELECT extension, name from CREDITS&quot;); if ($stmt->execute()) { $stmt->bindColumn(‘EXTENSION', $extension); $stmt->bindColumn(‘NAME', $name); while ($stmt->fetch(PDO_FETCH_BOUND)) { echo “Extension: $extension ”; echo “Author: $name ”; } }
    31. 31. Error handling <ul><li>PDO offers 3 different error modes </li></ul>$dbh->setAttribute(PDO_ATTR_ERRMODE, $mode); <ul><ul><li>PDO_ERRMODE_SILENT
    32. 32. PDO_ERRMODE_WARNING
    33. 33. PDO_ERRMODE_EXCEPTION </li></ul><li>Attempts to map native codes to PDO generic codes
    34. 34. But still offers native info too </li></ul>
    35. 35. PDO_ERRMODE_EXCEPTION try { $dbh->exec($sql); } catch (PDOException $e) { // display warning message print $e->getMessage(); $info = $e->errorInfo; // $info[0] == $e->code; // unified error code // $info[1] is the driver specific error code // $info[2] is the driver specific error string }
    36. 36. Transactions try { $dbh->beginTransaction(); $dbh->query(‘UPDATE …’); $dbh->query(‘UPDATE …’); $dbh->commit(); } catch (PDOException $e) { $dbh->rollBack(); }
    37. 37. General Installation Considerations * Websites and web applications (server-side scripting) * Command line scripting * Desktop (GUI) applications For the first and most common form, you need three things: PHP itself, a web server and a web browser. You probably already have a web browser, and depending on your operating system setup, you may also have a web server (e.g. Apache on Linux and MacOS X; IIS on Windows). You may also rent webspace at a company. This way, you don't need to set up anything on your own, only write your PHP scripts, upload it to the server you rent, and see the results in your browser. In case of setting up the server and PHP on your own, you have two choices for the method of connecting PHP to the server. For many servers PHP has a direct module interface (also called SAPI). These servers include Apache, Microsoft Internet Information Server, Netscape and iPlanet servers. Many other servers have support for ISAPI, the Microsoft module interface (OmniHTTPd for example). If PHP has no module support for your web server, you can always use it as a CGI or FastCGI processor. This means you set up your server to use the CGI executable of PHP to process all PHP file requests on the server. If you are also interested to use PHP for command line scripting (e.g. write scripts autogenerating some images for you offline, or processing text files depending on some arguments you pass to them), you always need the command line executable.
    38. 38. ) PHP Sample Code Example PHP Script [ php_samples/anonymous_function.php ] Array ( [0] => ab [1] => stuv [2] => abcdef [3] => defghijkl ) [ php_samples/anonymous_function2.php ] Array ( [0] => ab [1] => stuv [2] => abcdef [3] => defghijkl ) [ php_samples/assignment1.php ] ( 5, 3 ) ( 11, 3 ) ( 17, 6 ) [ php_samples/block.php ] [ php_samples/class_extends.php ] [ php_samples/class_sample.php ] Programmer Name: Paul Conrad Paul Conrad has 12 years of programming experience. C++ is Paul Conrad's favorite programming language. Paul Conrad holds the degree: Bachelor of Science in Computer Science Programmer Name: Paul Conrad Paul Conrad has 22 years of programming experience. C++ is Paul Conrad's favorite programming language. Paul Conrad holds the degree: Bachelor of Science in Computer Science
    39. 39. [ php_samples/comment_sample.php ] Guess what? y is less than 5! [ php_samples/constant_sample.php ] Our school is California State University at San Bernardino Our school's Computer Science Dept has 4 academic programs php_samples/const_in_class.php ] [ php_samples/define1.php ] [ php_samples/define2.php ] [ php_samples/define3.php ]
    40. 40. Source File [ php_samples/anonymous_function.txt ] [ php_samples/anonymous_function2.txt ] [ php_samples/assignment1.txt ] [ php_samples/block.txt ] [ php_samples/class_extends.txt ] [ php_samples/class_sample.txt ] [ php_samples/comment_sample.txt ] [ php_samples/constant_sample.txt ]

    ×