<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Joey Rivera &#187; stored procedure</title>
	<atom:link href="http://www.joeyrivera.com/tag/stored-procedure/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joeyrivera.com</link>
	<description>Blogging about PHP, Actionscript, MySQL, and other interests.</description>
	<lastBuildDate>Fri, 02 Dec 2011 03:55:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Using MySQL Stored Procedures with PHP mysql/mysqli/pdo</title>
		<link>http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/</link>
		<comments>http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 03:02:19 +0000</pubDate>
		<dc:creator>Joey</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysqli]]></category>
		<category><![CDATA[pdo]]></category>
		<category><![CDATA[sp]]></category>
		<category><![CDATA[stored procedure]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.joeyrivera.com/?p=284</guid>
		<description><![CDATA[Wondering how to use stored procedures with PHP and MySQL? So was I and here&#8217;s what I&#8217;ve learned. In this tutorial I&#8217;ll explain how to use PHP (I&#8217;m using 5.2.6) to call MySQL (I&#8217;m using 5.0.2) stored procedures using the following database extensions: MySQL - http://us.php.net/manual/en/book.mysql.php MySQLi - http://uk2.php.net/manual/en/class.mysqli.php PDO - http://us.php.net/manual/en/class.pdo.php First we need to setup our [...]]]></description>
			<content:encoded><![CDATA[<p>Wondering how to use stored procedures with PHP and MySQL? So was I and here&#8217;s what I&#8217;ve learned. In this tutorial I&#8217;ll explain how to use PHP (I&#8217;m using 5.2.6) to call MySQL (I&#8217;m using 5.0.2) stored procedures using the following database extensions:</p>
<ul>
<li>MySQL - <a href="http://us.php.net/manual/en/book.mysql.php">http://us.php.net/manual/en/book.mysql.php</a></li>
<li>MySQLi - <a href="http://uk2.php.net/manual/en/class.mysqli.php">http://uk2.php.net/manual/en/class.mysqli.php</a></li>
<li>PDO - <a href="http://us.php.net/manual/en/class.pdo.php">http://us.php.net/manual/en/class.pdo.php</a></li>
</ul>
<p>First we need to setup our enviroment which consists of a new database with one table and two stored procedures. In your db tool of choice (I&#8217;ll be using the <a title="MySQL Query Browser Download" href="http://dev.mysql.com/downloads/gui-tools/5.0.html" target="_blank">MySQL Query Browser</a>) create a new database named <em>test</em>. After you create the new database, make sure to add a user called <em>example </em>with password <em>example </em>to the database and give it read access.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">CREATE DATABASE</span> `test`;</div>
<p>Now create the table <em>users</em>:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">DROP TABLE</span> IF <span class="kw1">EXISTS</span> `test`.`users`;<br />
<span class="kw1">CREATE TABLE</span> &nbsp;`test`.`users` <span class="br0">&#40;</span><br />
`users_id` <span class="kw2">INT</span><span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="kw3">UNSIGNED</span> <span class="kw3">NOT NULL</span> <span class="kw3">AUTO_INCREMENT</span>,<br />
`first_name` <span class="kw2">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span> <span class="kw3">NOT NULL</span>,<br />
`last_name` <span class="kw2">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span> <span class="kw3">NOT NULL</span>,<br />
<span class="kw1">PRIMARY KEY</span> &nbsp;<span class="br0">&#40;</span>`users_id`<span class="br0">&#41;</span><br />
<span class="br0">&#41;</span> ENGINE=<span class="kw1">INNODB</span> <span class="kw3">DEFAULT</span> <span class="kw3">CHARSET</span>=latin1;</div>
<p><span id="more-284"></span><br />
Before we create the stored procedures, lets put some dummy data in the <em>users </em>table. To do that just run the following query:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">INSERT</span> <span class="kw1">INTO</span> `test`.`users` <span class="kw1">VALUES</span> <span class="br0">&#40;</span><span class="kw3">NULL</span>, <span class="st0">&#8216;Joey&#8217;</span>, <span class="st0">&#8216;Rivera&#8217;</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="kw3">NULL</span>, <span class="st0">&#8216;John&#8217;</span>, <span class="st0">&#8216;Doe&#8217;</span><span class="br0">&#41;</span>;</div>
<p>Next create the first stored procedure <em>get_user</em>:</p>
<div class="dean_ch" style="white-space: wrap;">DELIMITER $$<br />
<span class="kw1">DROP PROCEDURE</span> IF <span class="kw1">EXISTS</span> `test`.`get_user`$$<br />
<span class="kw1">CREATE PROCEDURE</span> &nbsp;`test`.`get_user`<br />
<span class="br0">&#40;</span><br />
<span class="kw5">IN</span> userId <span class="kw2">INT</span>,<br />
OUT firstName <span class="kw2">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span>,<br />
OUT lastName <span class="kw2">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span><br />
<span class="br0">&#41;</span><br />
<span class="kw1">BEGIN</span><br />
<span class="kw1">SELECT</span> first_name, last_name<br />
<span class="kw1">INTO</span> firstName, lastName<br />
<span class="kw1">FROM</span> users<br />
<span class="kw1">WHERE</span> users_id = userId;<br />
<span class="kw1">END</span> $$<br />
DELIMITER ;</div>
<p>Finally create the second and last stored procedure <em>get_users</em>:</p>
<div class="dean_ch" style="white-space: wrap;">DELIMITER $$<br />
<span class="kw1">DROP PROCEDURE</span> IF <span class="kw1">EXISTS</span> `test`.`get_users`$$<br />
<span class="kw1">CREATE PROCEDURE</span> &nbsp;`test`.`get_users`<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="kw1">BEGIN</span><br />
<span class="kw1">SELECT</span> *<br />
<span class="kw1">FROM</span> users;<br />
<span class="kw1">END</span> $$<br />
DELIMITER ;</div>
<p>If you understand the sql above, skip this section. The first script we ran to create a database is pretty self explanitory. The second script will delete the table <em>users </em>if it&#8217;s already in your database then it will recreate it. The table will consist of three fields: <em>users_id</em>, <em>first_name</em>, and <em>last_name</em>. The insert script will create two users: &#8216;Joey Rivera&#8217; and &#8216;John Doe&#8217;. </p>
<p>If stored procedures are new to you, don&#8217;t worry. They aren&#8217;t that complicated once you start playing with them. When looking at the code for the first stored procedure, <em>drop procedure</em> works the same way as dropping a table. First you want to check if the stored procedure is there and deleted before you recreate it. <em>Create </em>does just that, create the stored procedure in the database. <em>get_user </em>has three parameters: <em>userId</em>, <em>firstName</em>, and <em>lastName</em>. <em>IN </em>means when this stored procedure is called, this variable should be passed with a value. <em>OUT </em>means after the stored procedure executes, it will set the <em>OUT </em>variables with a value that can then be retrieved. You can also have <em>INOUT </em>variables but we don&#8217;t need them for this example.</p>
<p>The blulk of the code for the stored procedure goes in the <em>BEGIN</em> to <em>END</em> block. <em>get_user</em> is selecting the first and last name fields from the table users where the user id is equal to the <em>userId </em>variable being passed in. The other thing happening here is the two <em>OUT </em>variables are getting the values retrieved from the select statement. Variable <em>firstName </em>is set to the field <em>first_name </em>and <em>lastName </em>is being set to <em>last_name</em>. That&#8217;s it for <em>get_user</em>. <em>get_users </em>doesn&#8217;t have any <em>IN </em>nor <em>OUT </em>variables. When that stored procedure is executed it will return a recordset instead of variables. </p>
<p>Now that we have our environment set, we are ready to start our tests. Depending on what you are trying to achieve, you may be using <em>mysql</em>, <em>mysqli</em>, or <em>PDO</em>. I&#8217;m going to run the same tests with all three to show you the difference as well as the limitation of <em>mysql </em>compared to <em>mysqli </em>and <em>PDO</em>. One of the tests I&#8217;ll be running doesn&#8217;t work with <em>mysql </em>while all the tests work with <em>mysqli </em>and <em>PDO</em>. </p>
<p>The three tests will be:</p>
<ol>
<li>A simple select statement</li>
<li>Calling stored procedure passing <em>IN </em>variable and retrieve <em>OUT </em>variables &#8211; <em>get_user</em></li>
<li>Calling stored procedure with no parameters and returns a recordset &#8211; <em>get_users</em></li>
</ol>
<p>Below is the code to run all three tests with each of the database extensions:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw2">&lt;?php</span><br />
<span class="co1">// MYSQL</span><br />
<span class="re0">$mysql</span> = <a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="st0">&#8216;localhost&#8217;</span>, <span class="st0">&#8216;example&#8217;</span>, <span class="st0">&#8216;example&#8217;</span><span class="br0">&#41;</span>;<br />
<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="st0">&#8216;test&#8217;</span>, <span class="re0">$mysql</span><span class="br0">&#41;</span>;</p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;MYSQL: simple select&lt;/h3&gt;&#8217;</span>;<br />
<span class="re0">$rs</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span> <span class="st0">&#8216;SELECT * FROM users;&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> = <a href="http://www.php.net/mysql_fetch_assoc"><span class="kw3">mysql_fetch_assoc</span></a><span class="br0">&#40;</span><span class="re0">$rs</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;MYSQL: calling sp with out variables&lt;/h3&gt;&#8217;</span>;<br />
<span class="re0">$rs</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span> <span class="st0">&#8216;CALL get_user(1, @first, @last)&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="re0">$rs</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span> <span class="st0">&#8216;SELECT @first, @last&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> = <a href="http://www.php.net/mysql_fetch_assoc"><span class="kw3">mysql_fetch_assoc</span></a><span class="br0">&#40;</span><span class="re0">$rs</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;MYSQL: calling sp returning a recordset &#8211; doesn<span class="es0">\&#8217;</span>t work&lt;/h3&gt;&#8217;</span>;<br />
<span class="re0">$rs</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span> <span class="st0">&#8216;CALL get_users()&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> = <a href="http://www.php.net/mysql_fetch_assoc"><span class="kw3">mysql_fetch_assoc</span></a><span class="br0">&#40;</span><span class="re0">$rs</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<span class="co1">// MYSQLI</span><br />
<span class="re0">$mysqli</span> = <span class="kw2">new</span> mysqli<span class="br0">&#40;</span><span class="st0">&#8216;localhost&#8217;</span>, <span class="st0">&#8216;example&#8217;</span>, <span class="st0">&#8216;example&#8217;</span>, <span class="st0">&#8216;test&#8217;</span><span class="br0">&#41;</span>;</p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;MYSQLI: simple select&lt;/h3&gt;&#8217;</span>;<br />
<span class="re0">$rs</span> = <span class="re0">$mysqli</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span> <span class="st0">&#8216;SELECT * FROM users;&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> = <span class="re0">$rs</span>-&gt;<span class="me1">fetch_object</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;MYSQLI: calling sp with out variables&lt;/h3&gt;&#8217;</span>;<br />
<span class="re0">$rs</span> = <span class="re0">$mysqli</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span> <span class="st0">&#8216;CALL get_user(1, @first, @last)&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="re0">$rs</span> = <span class="re0">$mysqli</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span> <span class="st0">&#8216;SELECT @first, @last&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> = <span class="re0">$rs</span>-&gt;<span class="me1">fetch_object</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;MYSQLI: calling sp returning a recordset&lt;/h3&gt;&#8217;</span>;<br />
<span class="re0">$rs</span> = <span class="re0">$mysqli</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span> <span class="st0">&#8216;CALL get_users()&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> = <span class="re0">$rs</span>-&gt;<span class="me1">fetch_object</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<span class="co1">// PDO</span><br />
<span class="re0">$pdo</span> = <span class="kw2">new</span> PDO<span class="br0">&#40;</span><span class="st0">&#8216;mysql:dbname=test;host=127.0.0.1&#8242;</span>, <span class="st0">&#8216;example&#8217;</span>, <span class="st0">&#8216;example&#8217;</span><span class="br0">&#41;</span>;</p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;PDO: simple select&lt;/h3&gt;&#8217;</span>;<br />
<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$pdo</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span> <span class="st0">&#8216;SELECT * FROM users;&#8217;</span> <span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$row</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;PDO: calling sp with out variables&lt;/h3&gt;&#8217;</span>;<br />
<span class="re0">$pdo</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span> <span class="st0">&#8216;CALL get_user(1, @first, @last)&#8217;</span> <span class="br0">&#41;</span>;<br />
<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$pdo</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span> <span class="st0">&#8216;SELECT @first, @last&#8217;</span> <span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$row</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;h3&gt;PDO: calling sp returning a recordset&lt;/h3&gt;&#8217;</span>;<br />
<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$pdo</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span> <span class="st0">&#8216;CALL get_users()&#8217;</span> <span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$row</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
debug<span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>
<span class="kw2">function</span> debug<span class="br0">&#40;</span><span class="re0">$o</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;pre&gt;&#8217;</span>;<br />
<a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="re0">$o</span><span class="br0">&#41;</span>;<br />
<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&#8216;&lt;/pre&gt;&#8217;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="kw2">?&gt;</span></div>
<p> <br />
When you run this code you get the following results:</p>
<div class="dean_ch" style="white-space: wrap;"><a href="http://www.php.net/mysql"><span class="kw3">MYSQL</span></a>: simple select<br />
<a href="http://www.php.net/array"><span class="kw3">Array</span></a><br />
<span class="re1"><span class="br0">&#40;</span><br />
&nbsp; &nbsp; <span class="br0">&#91;</span>users_id<span class="br0">&#93;</span> =&gt; <span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="br0">&#91;</span>first_name<span class="br0">&#93;</span> =&gt; Joey<br />
&nbsp; &nbsp; <span class="br0">&#91;</span>last_name<span class="br0">&#93;</span> =&gt; Rivera<br />
<span class="br0">&#41;</span></span><br />
<a href="http://www.php.net/array"><span class="kw3">Array</span></a><br />
<span class="br0">&#40;</span><br />
&nbsp; &nbsp; <span class="br0">&#91;</span>users_id<span class="br0">&#93;</span> =&gt; <span class="nu0">2</span><br />
&nbsp; &nbsp; <span class="br0">&#91;</span>first_name<span class="br0">&#93;</span> =&gt; John<br />
&nbsp; &nbsp; <span class="br0">&#91;</span>last_name<span class="br0">&#93;</span> =&gt; Doe<br />
<span class="br0">&#41;</span></p>
<p>
<a href="http://www.php.net/mysql"><span class="kw3">MYSQL</span></a>: calling sp with out variables<br />
<a href="http://www.php.net/array"><span class="kw3">Array</span></a><br />
<span class="br0">&#40;</span><br />
&nbsp; &nbsp; <span class="br0">&#91;</span>@first<span class="br0">&#93;</span> =&gt; Joey<br />
&nbsp; &nbsp; <span class="br0">&#91;</span>@last<span class="br0">&#93;</span> =&gt; Rivera<br />
<span class="br0">&#41;</span></p>
<p>
<a href="http://www.php.net/mysql"><span class="kw3">MYSQL</span></a>: calling sp returning a recordset &#8211; doesn<span class="st0">&#8216;t work<br />
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in ***test.php on line 24</p>
<p>
MYSQLI: simple select<br />
stdClass Object<br />
(<br />
&nbsp; &nbsp; [users_id] =&gt; 1<br />
&nbsp; &nbsp; [first_name] =&gt; Joey<br />
&nbsp; &nbsp; [last_name] =&gt; Rivera<br />
)<br />
stdClass Object<br />
(<br />
&nbsp; &nbsp; [users_id] =&gt; 2<br />
&nbsp; &nbsp; [first_name] =&gt; John<br />
&nbsp; &nbsp; [last_name] =&gt; Doe<br />
)</p>
<p>
MYSQLI: calling sp with out variables<br />
stdClass Object<br />
(<br />
&nbsp; &nbsp; [@first] =&gt; Joey<br />
&nbsp; &nbsp; [@last] =&gt; Rivera<br />
)</p>
<p>
MYSQLI: calling sp returning a recordset<br />
stdClass Object<br />
(<br />
&nbsp; &nbsp; [users_id] =&gt; 1<br />
&nbsp; &nbsp; [first_name] =&gt; Joey<br />
&nbsp; &nbsp; [last_name] =&gt; Rivera<br />
)<br />
stdClass Object<br />
(<br />
&nbsp; &nbsp; [users_id] =&gt; 2<br />
&nbsp; &nbsp; [first_name] =&gt; John<br />
&nbsp; &nbsp; [last_name] =&gt; Doe<br />
)</p>
<p>
PDO: simple select<br />
Array<br />
(<br />
&nbsp; &nbsp; [users_id] =&gt; 1<br />
&nbsp; &nbsp; [0] =&gt; 1<br />
&nbsp; &nbsp; [first_name] =&gt; Joey<br />
&nbsp; &nbsp; [1] =&gt; Joey<br />
&nbsp; &nbsp; [last_name] =&gt; Rivera<br />
&nbsp; &nbsp; [2] =&gt; Rivera<br />
)<br />
Array<br />
(<br />
&nbsp; &nbsp; [users_id] =&gt; 2<br />
&nbsp; &nbsp; [0] =&gt; 2<br />
&nbsp; &nbsp; [first_name] =&gt; John<br />
&nbsp; &nbsp; [1] =&gt; John<br />
&nbsp; &nbsp; [last_name] =&gt; Doe<br />
&nbsp; &nbsp; [2] =&gt; Doe<br />
)</p>
<p>
PDO: calling sp with out variables<br />
Array<br />
(<br />
&nbsp; &nbsp; [@first] =&gt; Joey<br />
&nbsp; &nbsp; [0] =&gt; Joey<br />
&nbsp; &nbsp; [@last] =&gt; Rivera<br />
&nbsp; &nbsp; [1] =&gt; Rivera<br />
)</p>
<p>
PDO: calling sp returning a recordset<br />
Array<br />
(<br />
&nbsp; &nbsp; [users_id] =&gt; 1<br />
&nbsp; &nbsp; [0] =&gt; 1<br />
&nbsp; &nbsp; [first_name] =&gt; Joey<br />
&nbsp; &nbsp; [1] =&gt; Joey<br />
&nbsp; &nbsp; [last_name] =&gt; Rivera<br />
&nbsp; &nbsp; [2] =&gt; Rivera<br />
)<br />
Array<br />
(<br />
&nbsp; &nbsp; [users_id] =&gt; 2<br />
&nbsp; &nbsp; [0] =&gt; 2<br />
&nbsp; &nbsp; [first_name] =&gt; John<br />
&nbsp; &nbsp; [1] =&gt; John<br />
&nbsp; &nbsp; [last_name] =&gt; Doe<br />
&nbsp; &nbsp; [2] =&gt; Doe<br />
)</span></div>
<p>As you can see from the results above, <em>mysql </em>could not get the recordset returned by the stored procedure while <em>mysqli </em>and <em>PDO </em>could. After some more research, some people mentioned (<a href="http://bobfield.blogspot.com/2006/09/php-and-mysql-stored-procedures.html">Bob&#8217;s World</a>, <a href="http://us.php.net/manual/en/function.mysql-connect.php#86645">php.net</a>) that by adding &#8216;false,65536&#8242; to the end of the <em>mysql_connect </em>line, <em>mysql </em>could then get recordsets from stored procedures. I tried this and in fact it does work. So by changing</p>
<div class="dean_ch" style="white-space: wrap;"><span class="re0">$mysql</span> = <a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="st0">&#8216;localhost&#8217;</span>, <span class="st0">&#8216;example&#8217;</span>, <span class="st0">&#8216;example&#8217;</span><span class="br0">&#41;</span>;</div>
<p>to:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="re0">$mysql</span> = <a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="st0">&#8216;localhost&#8217;</span>, <span class="st0">&#8216;example&#8217;</span>, <span class="st0">&#8216;example&#8217;</span>,<span class="kw2">false</span>,<span class="nu0">65536</span><span class="br0">&#41;</span>;</div>
<p>all the different database extensions work on all tests. So in the end, it seems all of these can work with stored procedures just as well.</p>
<p>Get the PHP code file: <a href="http://www.joeyrivera.com/blog_files/284/test.txt">test.php</a><br />
Get the DB script file: <a href="http://www.joeyrivera.com/blog_files/284/php_sp_example.sql">php_sp_example.sql</a></p>
<p>I hope this was helpful and feel free to leave any questions or comments.</p>
<p>EDIT: I have made a new post about doing the above but with a stored procedure that has in/out params as well as returns a recordset. Post at: <a href="http://www.joeyrivera.com/2009/using-mysql-stored-procedure-inout-and-recordset-w-php/">Using MySQL stored procedures with in/out and returns a recordset</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/feed/</wfw:commentRss>
		<slash:comments>82</slash:comments>
		</item>
	</channel>
</rss>

