Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

PHP 5 and PDO

0 views
Skip to first unread message

mpar612

unread,
Apr 29, 2007, 11:13:40 AM4/29/07
to
I am working on converting some old PHP 4 scripts to PHP 5. I used to
use the PEAR DB module in PHP 4 and in PHP 5 I want to use PDO.

I am using this code to connect to the DB:

$dbh = new PDO('mysql:host=localhost;dbname=name', 'username',
'password');

Later on in the same page I use this code and it works just fine:

foreach($dbh->query('SELECT artist_id, artist_name FROM 10spot_artist
ORDER BY artist_name') as $row) {
$id = $row['artist_id'];
$name = stripslashes($row['artist_name']);
echo "<tr>
<td width=\"240\" height=\"35\"
background=\"images/ArtistColumnBack.gif\">
<b><font face=\"Arial\" size=\"2\"
color=\"#FFFFFF
\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href=\"Artist.php?id=$id\" style=
\"text-decoration: none\">$name</a></font></b></td>
</tr>";
}
$dbh = null;

Later on in the same page I use the following code and it doesn't
work. I don't get any errors or anything the page just stops executing
right at this code. I'm new to using PDO. Any thoughts on why this
doesn't work? Thanks in advance!

$head_sel_sql = $dbh->query('SELECT select_id, headline_id FROM
10spot_head_sel');
$headline_id = $head_sel_sql['headline_id'];
$dbh = null;

$head_display = $dbh->query('SELECT headline_id,
date, headline, headline_description FROM 10spot_headlines WHERE
headline_id = $headline_id');
$display_head =
stripslashes($head_display['headline']);
$display_date = $head_display['date'];
$display_description =
stripslashes($head_display['headline_description']);
echo "<tr>
<td><i><b><font face=\"Arial\" color=\"#BE2E2E
\">$display_head</font></b></i></td>
<td>
<p align=\"right\"><font size=\"2\" face=
\"Arial\">$display_date</font></td>
</tr>
<tr>
<td colspan=\"2\">
<font face=\"Arial\" style=\"font-size: 9pt\">
$display_description</font></td>
</tr>";
$dbh = null;

Schraalhans Keukenmeester

unread,
Apr 29, 2007, 12:00:10 PM4/29/07
to
On Sun, 29 Apr 2007 08:13:40 -0700, mpar612 wrote:

> I am working on converting some old PHP 4 scripts to PHP 5. I used to
> use the PEAR DB module in PHP 4 and in PHP 5 I want to use PDO.
>
> I am using this code to connect to the DB:
>
> $dbh = new PDO('mysql:host=localhost;dbname=name', 'username',
> 'password');
>
> Later on in the same page I use this code and it works just fine:
>
> foreach($dbh->query('SELECT artist_id, artist_name FROM 10spot_artist
> ORDER BY artist_name') as $row) {

[SNAP]


> }
> $dbh = null;
>
> Later on in the same page I use the following code and it doesn't
> work. I don't get any errors or anything the page just stops executing
> right at this code. I'm new to using PDO. Any thoughts on why this
> doesn't work? Thanks in advance!
>
> $head_sel_sql = $dbh->query('SELECT select_id, headline_id FROM
> 10spot_head_sel');

(assuming you posted all relevant code)

You create a PDO instance $dbh, use it, and then you destroy the object:
the next query can never be executed. Why the $dbh=null; ?
Either strip those out of your code, or re-instantiate a PDO object before
using it again.

The object will automatically be destroyed by PHP when the script ends.

HTH

Sh

mpar612

unread,
Apr 29, 2007, 4:06:51 PM4/29/07
to
> (assuming you posted all relevant code)
>
> You create a PDO instance $dbh, use it, and then you destroy the object:
> the next query can never be executed. Why the $dbh=null; ?
> Either strip those out of your code, or re-instantiate a PDO object before
> using it again.
>
> The object will automatically be destroyed by PHP when the script ends.
>
> HTH
>
> Sh

Thanks! I removed those $dbh=null; and still no luck. I know the SQL
statements are correct. They work perfectly in the code that I wrote
the code that uses the PEAR DB module. I have posted every bit of PHP
code that is on the page. All of the rest is just static HTML. Any
other thoughts? Thanks!

amygdala

unread,
Apr 29, 2007, 4:12:15 PM4/29/07
to

"mpar612" <mpa...@gmail.com> schreef in bericht
news:1177877211....@h2g2000hsg.googlegroups.com...


What happens if you do a...

try
{
$dbh->query('my query');
}
catch ( PDOException $e )
{
die( $e->getMessage() . ' on line: ' . __LINE__ );
}

...for both queries?

I suspect it could have something to do with buffered queries. I've had some
occasions where I got error messages stating that I should use:

$dbh->setAttribute( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE );

.. because another query is not finished yet, eventhough for instance, only
one
row should be returned and I fetched that row already.
I haven't given it enough attention yet, and just set the attribute to true,
but it looks like it could be some bug.

HTH


Schraalhans Keukenmeester

unread,
Apr 29, 2007, 4:23:39 PM4/29/07
to

You're welcome.

Sorry, I am not even remotely familiar with PDO's intricacies. Any attempt
to say something meaningful about it on my part would be a waste of group
space.

Amygdala seems to have at least some experience with PDO, he's your man!
Signing off on this one.


Rgds
Sh.

mpar612

unread,
Apr 29, 2007, 5:36:32 PM4/29/07
to
On Apr 29, 4:12 pm, "amygdala" <nore...@noreply.com> wrote:
> "mpar612" <mpar...@gmail.com> schreef in berichtnews:1177877211....@h2g2000hsg.googlegroups.com...

Thanks for the response! That didn't do anything, but return a blank
screen. I did a little playing around and the first statement works.
If I comment out that query and enter a hard value into the 2nd query,
it works. So, I think I need to figure out how to close the first
query so the 2nd query can execute. Does that make sense? Any
thoughts?

Thanks!

amygdala

unread,
Apr 29, 2007, 8:33:00 PM4/29/07
to

"mpar612" <mpa...@gmail.com> schreef in bericht
news:1177882592.8...@h2g2000hsg.googlegroups.com...

Now that I took a closer look at the code, is this the following really the
code you're using for the second query?

$head_display = $dbh->query('SELECT headline_id,
date, headline, headline_description FROM 10spot_headlines WHERE
headline_id = $headline_id');

If so, you should use " (double quotes), instead of ' (single quotes) to
let PHP evaluates the variable $headline_id.

HTH


mpar612

unread,
Apr 30, 2007, 4:27:59 PM4/30/07
to
On Apr 29, 8:33 pm, "amygdala" <nore...@noreply.com> wrote:
> "mpar612" <mpar...@gmail.com> schreef in berichtnews:1177882592.8...@h2g2000hsg.googlegroups.com...

Thanks! It actually turned out to be an issue with my end. You need
to end the query() before you can begin using another one. Got it
figured out. Thanks again!

0 new messages