<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
    <channel>
        <title>CUBRID PDO Driver Tutorial</title>
        <link>http://www.cubrid.org/?mid=cubrid_pdo_driver</link>
        <description>CUBRID PDO Driver Tutorial</description>
        <language>en</language>
        <pubDate>Fri, 25 Mar 2011 13:49:51 -0800</pubDate>
        <lastBuildDate>Fri, 16 Sep 2011 09:04:47 -0800</lastBuildDate>
        <generator>XpressEngine 1.4.4.1</generator>
                        										        <item>
            <title>CUBRID PDO Driver Tutorial</title>
            <dc:creator>admin</dc:creator>
            <link>http://www.cubrid.org/cubrid_pdo_driver</link>
            <guid isPermaLink="true">http://www.cubrid.org/cubrid_pdo_driver</guid>
                                    <description><![CDATA[<h1>CUBRID PDO Driver Tutorial</h1>

<p><span>The scope of this tutorial is to introduce the </span><span>CUBRID PDO Driver</span><span>, which implements the </span><span><a href="http://docs.php.net/manual/en/intro.pdo.php" target="_self">PHP Data Objects (PDO) interface</a></span><span>.</span></p>

<p><span>Note</span><span>: In this tutorial, we will assume that the reader is already familiar with the PDO basic concepts and architecture.</span></p>
<p>You can download the files for this tutorial <a href="/files/download/PDO.zip">here</a>.</p>

<h2><span>Overview</span></h2>
<p><span>“</span><span>The </span><span>PHP Data Objects (PDO)</span><span> extension defines a lightweight, consistent interface for accessing databases in PHP.</span></p>
<p><span>PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does </span><span>not </span><span>provide a database abstraction; it doesn't rewrite SQL or emulate missing features.</span></p>
<p><span>PDO ships with </span><span>PHP 5.1</span><span>, and is available as a PECL extension for PHP 5.0; PDO requires the new OO features in the core of PHP 5, and so will not run with earlier versions of PHP.</span><span>” (</span><span><a href="http://www.google.com/url?q=http%3A%2F%2Fdocs.php.net%2Fmanual%2Fen%2Fintro.pdo.php&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNFG5kUxQe-KwdvWUHzYK3InbFMyfQ">http://docs.php.net/manual/en/intro.pdo.php</a></span><span>).</span></p>


<table cellpadding="0" cellspacing="0"><tbody><tr><td><p><span>CUBRID has support for PDO for versions 3.0 and 3.1, and for both PHP 5.2.x and PHP 5.3.x (</span><span><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.cubrid.org%2Fphp_cubrid_pdo&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNFNvglE_xrhW6tJ2Wb_uFV3rFUXtA">http://www.cubrid.org/php_cubrid_pdo</a></span><span>).</span></p>
</td></tr></tbody></table>
<p><span>Using PDO as a database interface layer can have important advantages over “direct” PHP database drivers:</span></p>
<ol><li value="1"><span>Portable PHP code between different databases/Database abstraction</span></li>
<li><span>SQL Parameters support/Bind support</span></li>
<li><span>Safer SQLs (syntax verification, escaping, it helps protect against SQL injections etc.)</span></li>
<li><span>Cleaner programming model</span></li>
</ol>

<table cellpadding="0" cellspacing="0"><tbody><tr><td><p><span>In particular, having a CUBRID PDO Driver means that any application that uses PDO as a database interface should work with CUBRID! </span><span></span></p>
</td></tr></tbody></table>
<h2><span>Installing the CUBRID PDO Driver</span></h2>
<p><span>You can find all the necessary information regarding:</span></p>
<ol><li value="1"><span>Compiling</span><span> (or </span><span>Downloading</span><span>)</span></li>
<li><span>Installing</span></li>
<li><span>Configuring</span></li>
</ol><p><span>the CUBRID PDO driver at the following online location: </span><span><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.cubrid.org%2Fphp_cubrid_pdo&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNFNvglE_xrhW6tJ2Wb_uFV3rFUXtA">http://www.cubrid.org/php_cubrid_pdo</a></span><span>.</span></p>

<p><span>If you encounter any issues with the installation, please contact the CUBRID team through the dedicated PDO forum, located at </span><span><a href="/?mid=forum&amp;category=195537&amp;act=dispForumContent" target="_self">http://forum.cubrid.org</a></span><span>.</span></p>

<p><span>If you want to verify that the CUBRID PDO driver is accessible, you can use the </span><span>PDO::getAvailableDrivers()</span><span> function:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<span>&lt;?php</span>
<span>echo</span><span>'PDO Drivers available: &lt;br /&gt;'</span><span>;</span>
<span>foreach</span><span>(</span><span>PDO</span><span>::</span><span>getAvailableDrivers</span><span>()</span><span>as</span><span> $driver</span><span>)</span>
<span>{</span>
<span>if</span><span>(</span><span>$driver </span><span>==</span><span>"cubrid"</span><span>)</span><span>{</span>
<span>echo</span><span>" - Driver: &lt;b&gt;"</span><span>.</span><span>$driver</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span>
<span>}</span><span>else</span><span>{</span>
<span>echo</span><span>" - Driver: "</span><span>.</span><span>$driver</span><span>.</span><span>'&lt;br /&gt;'</span><span>;</span>
<span>}</span>
<span>}</span><span> &nbsp; &nbsp;</span>
<span>?&gt;</span>
</div>
</div>

<p><span>This script will output all the currently installed PDO drivers:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>PDO Drivers available: </span></p>
<p><span>- Driver: mysql</span></p>
<p><span>- Driver: pgsql</span></p>
<p><span>- Driver: sqlite</span></p>
<p><span>- Driver: sqlite2</span></p>
<p><span>- Driver: </span><span>cubrid</span></p>
</div>
</div>

<h2><span>Connecting to CUBRID</span></h2>
<p><span>The CUBRID PDO Data Source Name (</span><span>DSN</span><span>) is composed of the following parts (delimited by “;”):</span></p>
<ol><li value="1"><span>DSN prefix</span><span>: The DSN prefix is always “</span><span>cubrid</span><span>”</span></li>
<li><span>Host</span><span>: The hostname on which the database server is located</span></li>
<li><span>Port</span><span>: The port on which the database server is located</span></li>
<li><span>Dbname</span><span>: The name of the database.</span></li>
</ol>
<table cellpadding="0" cellspacing="0"><tbody><tr><td><p><span>CUBRID DSN Example: </span><span>cubrid:dbname=demodb;host=192.168.0.10;port=30000;</span></p>
</td></tr></tbody></table>

<p><span>Let’s see an example of a simple PHP script which performs a PDO connection to the CUBRID </span><span>“demodb</span><span>” database:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>&lt;?php</span></p>
<p><span>$database </span><span>=</span><span>"demodb"</span><span>;</span></p>
<p><span>$host </span><span>=</span><span>"localhost"</span><span>;</span></p>
<p><span>$port </span><span>=</span><span>"30000"</span><span>;</span><span>//use default value</span></p>
<p><span>$username </span><span>=</span><span>"dba"</span><span>;</span></p>
<p><span>$password </span><span>=</span><span>""</span><span>;</span></p>

<p><span>try</span><span>{</span></p>
<p><span>//cubrid:host=localhost;port=33000;dbname=demodb</span></p>
<p><span>$conn_str </span><span>=</span><span>"cubrid:dbname="</span><span>.</span><span>$database</span><span>.</span><span>";host="</span><span>.</span><span>$host</span><span>.</span><span>";port="</span><span>.</span><span>$port</span><span>;</span></p>
<p><span>echo</span><span>"PDO connect string: "</span><span>.</span><span>$conn_str</span><span>.</span><span>"&lt;br /&gt;"</span><span>;</span></p>
<p><span>$db </span><span>=</span><span>new</span><span> PDO</span><span>(</span><span>$conn_str</span><span>,</span><span> $username</span><span>,</span><span> $password </span><span>)</span><span>;</span></p>
<p><span>echo</span><span>"PDO connection created ok!"</span><span>.</span><span>"&lt;br /&gt;"</span><span>;</span></p>
<p><span>$db </span><span>=</span><span> null</span><span>;</span><span>//disconnect</span></p>
<p><span>}</span><span>catch</span><span>(</span><span>PDOException $e</span><span>)</span><span>{</span></p>
<p><span>echo</span><span>"Error: "</span><span>.</span><span>$e</span><span>-&gt;</span><span>getMessage</span><span>().</span><span>"&lt;br /&gt;"</span><span>;</span></p>
<p><span>}</span></p>
<p><span>?&gt;</span></p>
</div>
</div>

<p><span>If everything goes ok, the output of this script is:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>PDO connect string: cubrid:dbname=demodb;host=localhost;port=30000</span></p>
<p><span>PDO connection created ok!</span></p>
</div>
</div>

<p><span>Looking at the code above, you can notice that:</span></p>
<ol><li value="5"><span>Errors are handling in PDO using a </span><span>try-catch</span><span> mechanism</span></li>
<li><span>The connection is closed by assigning </span><span>NULL</span><span> to the connection object</span></li>
</ol>
<h2><span>Executing a SELECT</span></h2>
<p><span>In PDO, there is more than one way to choose from, to run a SQL query:</span></p>
<ol><li value="7"><span>Use </span><span>query</span><span>(…)</span></li>
<li><span>Use prepared statements (</span><span>prepare()/execute()</span><span>)</span></li>
<li><span>Use </span><span>exec</span><span>(…) &nbsp;</span></li>
</ol>
<p><span>Without going into details (as we specified in the beginning of the tutorial, we assume that the reader is already familiar with the basics of PDO), it depends on the specific query and the application context to recommend a best solution to use.</span></p>

<p><span>In the following example, we will use the simplest one – use the </span><span>query</span><span>(…) function:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>&lt;?php</span></p>
<p><span>include</span><span>(</span><span>"_db_config.php"</span><span>)</span><span>;</span></p>
<p><span>include</span><span>(</span><span>"_db_connect.php"</span><span>)</span><span>;</span></p>

<p><span>$sql </span><span>=</span><span>"SELECT * FROM code"</span><span>;</span></p>
<p><span>echo</span><span>"Executing SQL: &lt;b&gt;"</span><span>.</span><span>$sql</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>
<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>

<p><span>try</span><span>{</span></p>
<p><span>foreach</span><span>(</span><span>$db</span><span>-&gt;</span><span>query</span><span>(</span><span>$sql</span><span>)</span><span>as</span><span> $row</span><span>)</span><span>{</span></p>
<p><span>echo</span><span> $row</span><span>[</span><span>'s_name'</span><span>].</span><span>' - '</span><span>.</span><span> $row</span><span>[</span><span>'f_name'</span><span>].</span><span>'&lt;br /&gt;'</span><span>;</span></p>
<p><span>}</span></p>
<p><span>}</span><span>catch</span><span>(</span><span>PDOException $e</span><span>)</span><span>{</span></p>
<p><span>echo</span><span> $e</span><span>-&gt;</span><span>getMessage</span><span>()</span><span>;</span></p>
<p><span>}</span></p>

<p><span>$db </span><span>=</span><span> null</span><span>;</span><span>//disconnect</span></p>
<p><span>?&gt;</span></p>
</div>
</div>

<p><span>The output of this script is:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>Executing SQL: SELECT * FROM code</span></p>

<p><span>X - Mixed</span></p>
<p><span>W - Woman</span></p>
<p><span>M - Man</span></p>
<p><span>B - Bronze</span></p>
<p><span>S - Silver</span></p>
<p><span>G - Goldie</span></p>
</div>
</div>

<p><span>As you can notice, you can retrieve the return values from the resultset (a PDOStatement object) by using the column names : </span><span>$rs[“column_name”]</span><span>.</span></p>

<table cellpadding="0" cellspacing="0"><tbody><tr><td><p><span>Note</span><span>: When using </span><span>query</span><span>(…), it is your responsibility to ensure that the query code is </span><span><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.php.net%2Fmanual%2Fen%2Fpdo.quote.php&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNEcXTDzQpAIfmrIQpf_mB4R0xoLtw">properly escaped</a></span><span>.</span></p>
</td></tr></tbody></table>
<h2><span>Executing an UPDATE</span></h2>
<p><span>Let’s see how to execute an UPDATE statement, using CUBRID PDO. We will be using a </span><span>prepared statement</span><span> (btw, we could also use, as an alternative, the </span><span>exec</span><span>() function) and </span><span>parameters</span><span>:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>&lt;?php</span></p>
<p><span>include</span><span>(</span><span>"_db_config.php"</span><span>)</span><span>;</span></p>
<p><span>include</span><span>(</span><span>"_db_connect.php"</span><span>)</span><span>;</span></p>

<p><span>$s_name </span><span>=</span><span>'X'</span><span>;</span></p>
<p><span>$f_name </span><span>=</span><span>'test'</span><span>;</span></p>
<p><span>$sql </span><span>=</span><span>"UPDATE code SET f_name=:f_name WHERE s_name=:s_name"</span><span>;</span></p>

<p><span>echo</span><span>"Executing SQL: &lt;b&gt;"</span><span>.</span><span>$sql</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>
<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>

<p><span>echo</span><span>":f_name: &lt;b&gt;"</span><span>.</span><span>$f_name</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>
<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>
<p><span>echo</span><span>":s_name: &lt;b&gt;"</span><span>.</span><span>$s_name</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>
<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>

<p><span>$qe </span><span>=</span><span> $db</span><span>-&gt;</span><span>prepare</span><span>(</span><span>$sql</span><span>)</span><span>;</span></p>
<p><span>$qe</span><span>-&gt;</span><span>execute</span><span>(</span><span>array</span><span>(</span><span>':s_name'</span><span>=&gt;</span><span>$s_name</span><span>,</span><span>':f_name'</span><span>=&gt;</span><span>$f_name</span><span>))</span><span>;</span></p>

<p><span>$sql </span><span>=</span><span>"SELECT * FROM code"</span><span>;</span></p>
<p><span>echo</span><span>"Executing SQL: &lt;b&gt;"</span><span>.</span><span>$sql</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>
<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>

<p><span>try</span><span>{</span></p>
<p><span>foreach</span><span>(</span><span>$db</span><span>-&gt;</span><span>query</span><span>(</span><span>$sql</span><span>)</span><span>as</span><span> $row</span><span>)</span><span>{</span></p>
<p><span>echo</span><span> $row</span><span>[</span><span>'s_name'</span><span>].</span><span>' - '</span><span>.</span><span> $row</span><span>[</span><span>'f_name'</span><span>].</span><span>'&lt;br /&gt;'</span><span>;</span></p>
<p><span>}</span></p>
<p><span>}</span><span>catch</span><span>(</span><span>PDOException $e</span><span>)</span><span>{</span></p>
<p><span>echo</span><span> $e</span><span>-&gt;</span><span>getMessage</span><span>()</span><span>;</span></p>
<p><span>}</span></p>

<p><span>$db </span><span>=</span><span> null</span><span>;</span><span>//disconnect &nbsp;</span></p>
<p><span>?&gt;</span></p>
</div>
</div>

<p><span>The output of the script is:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>Executing SQL: UPDATE code SET f_name=:f_name WHERE s_name=:s_name</span></p>

<p><span>:f_name: test</span></p>

<p><span>:s_name: X</span></p>

<p><span>Executing SQL: SELECT * FROM code</span></p>

<p><span>X - </span><span>test</span></p>
<p><span>W - Woman</span></p>
<p><span>M - Man</span></p>
<p><span>B - Bronze</span></p>
<p><span>S - Silver</span></p>
<p><span>G – Goldie</span></p>
</div>
</div>

<h2><span>Using Prepare and Bind</span></h2>
<p><span>Prepared statements are one of the major benefits offered by PDO:</span></p>
<ol><li value="1"><span>SQL prepared statements need to be </span><span>parsed only once</span><span>, even if they are executed multiple times, with different parameter values. Therefore, using a prepared statement minimizes the resources and, in general, the prepared statements run faster.</span></li>
<li><span>Another important advantage is that it helps to </span><span>prevent SQL injection</span><span> attacks by eliminating the need to manually quote the parameters (however, if other parts of the SQL query are being built up with unescaped input, SQL injection would still be possible).</span></li>
</ol>
<p><span>In the next example, we will use a prepared statement to retrieve data:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>&lt;?php</span></p>
<p><span>include</span><span>(</span><span>"_db_config.php"</span><span>)</span><span>;</span></p>
<p><span>include</span><span>(</span><span>"_db_connect.php"</span><span>)</span><span>;</span></p>

<p><span>$sql </span><span>=</span><span>"SELECT * FROM code WHERE s_name NOT LIKE :s_name"</span><span>;</span></p>
<p><span>echo</span><span>"Executing SQL: &lt;b&gt;"</span><span>.</span><span>$sql</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>

<p><span>$s_name </span><span>=</span><span>'xyz'</span><span>;</span></p>
<p><span>echo</span><span>":s_name: &lt;b&gt;"</span><span>.</span><span>$s_name</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>

<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>

<p><span>try</span><span>{</span></p>
<p><span>$stmt </span><span>=</span><span> $db</span><span>-&gt;</span><span>prepare</span><span>(</span><span>$sql</span><span>)</span><span>;</span></p>

<p><span>$stmt</span><span>-&gt;</span><span>bindParam</span><span>(</span><span>':s_name'</span><span>,</span><span> $s_name</span><span>,</span><span> PDO</span><span>::</span><span>PARAM_STR</span><span>)</span><span>;</span></p>
<p><span>$stmt</span><span>-&gt;</span><span>execute</span><span>()</span><span>;</span></p>

<p><span>$result </span><span>=</span><span> $stmt</span><span>-&gt;</span><span>fetchAll</span><span>()</span><span>;</span></p>
<p><span>foreach</span><span>(</span><span>$result </span><span>as</span><span> $row</span><span>)</span></p>
<p><span>{</span></p>
<p><span>echo</span><span> $row</span><span>[</span><span>'s_name'</span><span>].</span><span>' - '</span><span>.</span><span> $row</span><span>[</span><span>'f_name'</span><span>].</span><span>'&lt;br /&gt;'</span><span>;</span></p>
<p><span>}</span></p>
<p><span>}</span><span>catch</span><span>(</span><span>PDOException $e</span><span>)</span><span>{</span></p>
<p><span>echo</span><span> $e</span><span>-&gt;</span><span>getMessage</span><span>()</span><span>;</span></p>
<p><span>}</span></p>
<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>

<p><span>$sql </span><span>=</span><span>"SELECT * FROM code WHERE s_name NOT LIKE :s_name"</span><span>;</span></p>
<p><span>echo</span><span>"Executing SQL: &lt;b&gt;"</span><span>.</span><span>$sql</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>

<p><span>$s_name </span><span>=</span><span>'X'</span><span>;</span></p>
<p><span>echo</span><span>":s_name: &lt;b&gt;"</span><span>.</span><span>$s_name</span><span>.</span><span>'&lt;/b&gt;&lt;br /&gt;'</span><span>;</span></p>

<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>

<p><span>try</span><span>{</span></p>
<p><span>$stmt </span><span>=</span><span> $db</span><span>-&gt;</span><span>prepare</span><span>(</span><span>$sql</span><span>)</span><span>;</span></p>

<p><span>$stmt</span><span>-&gt;</span><span>bindParam</span><span>(</span><span>':s_name'</span><span>,</span><span> $s_name</span><span>,</span><span> PDO</span><span>::</span><span>PARAM_STR</span><span>)</span><span>;</span></p>
<p><span>$stmt</span><span>-&gt;</span><span>execute</span><span>()</span><span>;</span></p>

<p><span>$result </span><span>=</span><span> $stmt</span><span>-&gt;</span><span>fetchAll</span><span>()</span><span>;</span></p>
<p><span>foreach</span><span>(</span><span>$result </span><span>as</span><span> $row</span><span>)</span></p>
<p><span>{</span></p>
<p><span>echo</span><span> $row</span><span>[</span><span>'s_name'</span><span>].</span><span>' - '</span><span>.</span><span> $row</span><span>[</span><span>'f_name'</span><span>].</span><span>'&lt;br /&gt;'</span><span>;</span></p>
<p><span>}</span></p>
<p><span>$stmt</span><span>-&gt;</span><span>closeCursor</span><span>()</span><span>;</span></p>
<p><span>}</span><span>catch</span><span>(</span><span>PDOException $e</span><span>)</span><span>{</span></p>
<p><span>echo</span><span> $e</span><span>-&gt;</span><span>getMessage</span><span>()</span><span>;</span></p>
<p><span>}</span></p>
<p><span>echo</span><span>'&lt;br /&gt;'</span><span>;</span></p>

<p><span>$db </span><span>=</span><span> null</span><span>;</span><span>//disconnect</span></p>
<p><span>?&gt;</span></p>
</div>
</div>

<p><span>The output of this script is:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>Executing SQL: SELECT * FROM code WHERE s_name NOT LIKE :s_name</span></p>
<p><span>:s_name: xyz</span></p>

<p><span>X - Mixed</span></p>
<p><span>W - Woman</span></p>
<p><span>M - Man</span></p>
<p><span>B - Bronze</span></p>
<p><span>S - Silver</span></p>
<p><span>G - Goldie</span></p>

<p><span>Executing SQL: SELECT * FROM code WHERE s_name NOT LIKE :s_name</span></p>
<p><span>:s_name: X</span></p>

<p><span>W - Woman</span></p>
<p><span>M - Man</span></p>
<p><span>B - Bronze</span></p>
<p><span>S - Silver</span></p>
<p><span>G - Goldie</span></p>
</div>
</div>

<table cellpadding="0" cellspacing="0"><tbody><tr><td><p><span>Remember</span><span>: Using </span><span>prepare(…) </span><span>for SQL statements that will be issued multiple times, with different parameter values, will most likely optimize the overall CUBRID application performance.</span></p>
</td></tr></tbody></table>
<h2><span>Using PDO::getAttribute(…)</span></h2>
<p><span>The </span><span>PDO::getAttribute</span><span>(…) function is very useful to retrieve the database connection attributes, for example:</span></p>
<ol><li value="3"><span>Driver name</span></li>
<li><span>Database versions</span></li>
<li><span>Auto-Commit state</span></li>
<li><span>Error mode</span></li>
<li><span>Etc.</span></li>
</ol>
<p><span>Note</span><span>: To set the attributes values (if they are writable!), the function </span><span>PDO::setAttribute</span><span>(…) should be used.</span></p>

<p><span>Let’s see a PHP PDO script which uses the </span><span>getAttribute</span><span>() function to retrieve the client and the server current versions: </span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>&lt;?php</span></p>
<p><span>include</span><span>(</span><span>"_db_config.php"</span><span>)</span><span>;</span></p>
<p><span>include</span><span>(</span><span>"_db_connect.php"</span><span>)</span><span>;</span></p>

<p><span>echo</span><span>"Driver name: &lt;b&gt;"</span><span>.</span><span>$db</span><span>-&gt;</span><span>getAttribute</span><span>(</span><span>PDO</span><span>::</span><span>ATTR_DRIVER_NAME</span><span>).</span><span>"&lt;/b&gt;"</span><span>;</span></p>
<p><span>echo</span><span>"&lt;br&gt;"</span><span>;</span></p>
<p><span>echo</span><span>"Client version: &lt;b&gt;"</span><span>.</span><span>$db</span><span>-&gt;</span><span>getAttribute</span><span>(</span><span>PDO</span><span>::</span><span>ATTR_CLIENT_VERSION</span><span>).</span><span>"&lt;/b&gt;"</span><span>;</span></p>
<p><span>echo</span><span>"&lt;br&gt;"</span><span>;</span></p>
<p><span>echo</span><span>"Server version: &lt;b&gt;"</span><span>.</span><span>$db</span><span>-&gt;</span><span>getAttribute</span><span>(</span><span>PDO</span><span>::</span><span>ATTR_SERVER_VERSION</span><span>).</span><span>"&lt;/b&gt;"</span><span>;</span></p>
<p><span>echo</span><span>"&lt;br&gt;"</span><span>;</span></p>

<p><span>$db </span><span>=</span><span> null</span><span>;</span><span>//disconnect &nbsp;</span></p>
<p><span>?&gt;</span></p>
</div>
</div>

<p><span>The output of the script, when run on CUBRID 3.0, is:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>Driver name: </span><span>cubrid</span></p>
<p><span>Client version: </span><span>8.3.0</span></p>
<p><span>Server version: </span><span>8.3.0.0337</span></p>
</div>
</div>

<h2><span>CUBRID PDO extensions</span></h2>
<p><span>Finally, let’s see an example of using a specific CUBRID PDO extension. A PDO extension is a set of features added “on top” of the standard PDO functionalities. It’s not unusual for a database to extend the standard set of PDO functionalities, by adding specific features.</span></p>

<p><span>In CUBRID, such an extension is the function PDO::</span><span>cubrid_schema</span><span>(…), which is used to retrieve the database schema/metadata information:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>array PDO::cubrid_schema ( int $schema_type [, string $table_name [, string $col_name ]] )</span></p>
</div>
</div>

<p><span>You can find all the details regarding this extension here: </span><span><a href="http://www.google.com/url?q=http%3A%2F%2Fphp.net%2Fmanual%2Fen%2Ffunction.pdo-cubrid_schema.php&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNHnxf2cjO9QKbZIHt75wC3cMCcIcw">http://php.net/manual/en/function.pdo-cubrid_schema.php</a></span><span>. </span></p>

<p><span>And here below is a script which will return information about the primary key for the “</span><span>nation</span><span>” table, using the </span><span>cubrid_schema</span><span>(…)</span><span> function:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>&lt;?php</span></p>
<p><span>include</span><span>(</span><span>"_db_config.php"</span><span>)</span><span>;</span></p>
<p><span>include</span><span>(</span><span>"_db_connect.php"</span><span>)</span><span>;</span></p>
<p><span>try</span><span>{</span></p>
<p><span>echo</span><span>"Get PRIMARY KEY for table: &lt;b&gt;nation&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;"</span><span>;</span></p>
<p><span>$pk_list </span><span>=</span><span> $db</span><span>-&gt;</span><span>cubrid_schema</span><span>(</span><span>PDO</span><span>::</span><span>CUBRID_SCH_PRIMARY_KEY</span><span>,</span><span>"nation"</span><span>)</span><span>;</span></p>
<p><span>print_r</span><span>(</span><span>$pk_list</span><span>)</span><span>;</span></p>
<p><span>}</span><span>catch</span><span>(</span><span>PDOException $e</span><span>)</span><span>{</span></p>
<p><span>echo</span><span> $e</span><span>-&gt;</span><span>getMessage</span><span>()</span><span>;</span></p>
<p><span>}</span></p>

<p><span>$db </span><span>=</span><span> null</span><span>;</span><span>//disconnect</span></p>
<p><span>?&gt;</span></p>
</div>
</div>

<p><span>The output of the script is:</span></p>

<div class="code">
<div class="code" editor_component="code_highlighter" code_type="php" file_path="" description="" first_line="1" collapse="false" nogutter="false" nocontrols="false">
<p><span>Get PRIMARY KEY for table: nation:</span></p>
<p><span>Array ( [0] =&gt; Array ( [CLASS_NAME] =&gt; nation [ATTR_NAME] =&gt; code [KEY_SEQ] =&gt; 1 [KEY_NAME] =&gt; pk_nation_code ) )</span></p>
</div>
</div>

<h2><span>Summary</span></h2>
<p><span>As you can see from the examples above, using CUBRID PDO Driver is not difficult at all…!</span></p>

<p><span>We strongly encourage you to try by yourself the CUBRID PDO implementation, to check for the other functions and features which were not covered in this tutorial.</span></p>

<p><span>One other recommendation we make is to try to “port” existing PDO applications to CUBRID, to leverage the CUBRID PDO support and, at the same time, learn PDO programming “by example”.</span></p>

<h2><span>Links &amp; Resources</span></h2>
<table cellpadding="0" cellspacing="0"><tbody><tr><td><p><span>CUBRID Online Manual</span></p>
</td><td><p><span><a href="/manual" target="_self">http://www.cubrid.org/webmanual/3.1/</a></span></p>
</td></tr><tr><td><p><span>PHP PDO Manual</span></p>
</td><td><p><span><a href="http://www.google.com/url?q=http%3A%2F%2Fdocs.php.net%2Fmanual%2Fen%2Fbook.pdo.php&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNENDH9IBWu9rpZ4KTlX8mkWqUKBmQ">http://docs.php.net/manual/en/book.pdo.php</a></span></p>
</td></tr><tr><td><p><span>CUBRID PDO Manual</span></p>
</td><td><p><span><a href="http://www.google.com/url?q=http%3A%2F%2Fdocs.php.net%2Fmanual%2Fen%2Fref.pdo-cubrid.php&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNFOVs4KCIsx375orHx4ws5DXtvTyg">http://docs.php.net/manual/en/ref.pdo-cubrid.php</a></span></p>
</td></tr><tr><td><p><span>CUBRID PDO Code Examples</span></p>
</td><td><p><span><a href="http://www.google.com/url?q=http%3A%2F%2Fcubridsrccode.svn.sourceforge.net%2Fviewvc%2Fcubridsrccode%2FPHP-PDO%2F&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNF8o996lm4kTrfj2ahVVYFTpLg2Aw">http://cubridsrccode.svn.sourceforge.net/viewvc/cubridsrccode/PHP-PDO/</a></span></p></td></tr></tbody></table>

<p><span>This concludes the </span><span>CUBRID PDO Driver tutorial</span><span>. Please let us know your feedback and remember to periodically check the CUBRID web site – </span><span><a href="http://www.google.com/url?q=http%3A%2F%2Fwww.cubrid.org%2Ftutorials&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNF-OBzZ9W383ZD4mEuYbRkswofQ4w">www.cubrid.org/tutorials</a></span><span> - for other tutorials and resources.</span></p>
<p><span>Thank you!</span></p>]]></description>
                        <pubDate>Fri, 25 Mar 2011 13:30:37 -0800</pubDate>
                        <category>pdo</category>
                        <category>php</category>
                                </item>
            </channel>
</rss>
