views:

18

answers:

2

I am new to PDO objects and cannot find a single piece of documentation that will help me. Say I got a simple code to delete a row:

$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'");

That will return affected rows, but how would I use prepared statements with that? Can use use $dbh->prepare AND $dbh->exec or query !?

+1  A: 

$dbh->prepare returns a PDOStatement object. You then call $stmt->execute to get the result.

More info in the PDO manual

Here's an example from the manual:

<?php
/* Execute a prepared statement by passing an array of insert values */
$calories = 150;
$colour = 'red';
$stmt = $dbh->prepare('SELECT name, colour, calories
                       FROM fruit
                       WHERE calories < ? AND colour = ?');
$stmt->execute(array($calories, $colour));
?>
Tor Valamo
But how would I return number of rows affected? Can I use it like in my example, `$count = $stmt->execute`? EDIT: someone else answered it.
John
+3  A: 

It should be the same as any other statement:

$stmt = $dbh->prepare("DELETE FROM fruit WHERE colour = ?");
$stmt->execute(array('red'));
$count = $stmt->rowCount();

The PDO Statement rowCount() should be what you are looking to do.

EDIT

Fixed by adding the ->rowCount() which will return the row count. ->execute in a statement will return a bool, true or false whether the query errored out or not. Of course all of this information is readily available at the PDO Statement Manual

Brad F Jacobs
So `->execute` can return affected rows too, this is exactly what I needed. Thank you!
John
No, I had an error before. The manual states that `->execute` returns a bool, but looking at the other functions in the manual, `->rowCount()` will provide the count.
Brad F Jacobs
This would fit my code perfectly, and makes a lot more sense with the `->rowCount()` function in the end. Thanks again.
John