1

Could you please help me with this please, my question is about PHP, PDO and stored procedures in MySQL.

I have created a very simple stored procedure called selectAVG that returns the average grade of a subject via an output parameter, here is a stored procedure that I have created in order to test my code(I cannot post the code reffer to selectAVG because of my boss) but I hope with this you can catch up the whole idea.

DELIMITER $$

USE `ejemplo`$$

DROP PROCEDURE IF EXISTS `selectCount_sp`$$

CREATE DEFINER=`root`@`localhost`
PROCEDURE `selectCount_sp`(
OUT totalEmpleados INT    <-- out parameter
)
BEGIN  
      SELECT COUNT(Nombre) INTO totalEmpleados FROM empleado_php;
END$$

DELIMITER ;

and this is my script.php, what it does is to call the stored procedure and get the total of employees via the output parameter

try {   
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $sql = 'CALL selectCount_sp(@total)';
    $stmt = $conn->prepare($sql);
    $stmt->execute();

    $stmt->closeCursor(); //permite limpiar y ejecutar la segunda query

    $r = $conn->query('select @total')->fetch();
        print_r ($r);
    }
catch (PDOException $pe) {
    die("Error occurred:" . $pe->getMessage());
}

my problem is that I cannot get the output value with a simple echo, I have to use print_r in order to get this:

Array ( [@total] => 5 [0] => 5 )

but I just want to get a simple 5, what do I have to do to show for example: echo "the total is:" .$total and have this: the total is 5 ?

2 Answers 2

2

You can use ->fetchColumn() in this case:

$r = $conn->query('select @total');
$total = $r->fetchColumn();

If you have PHP 5.4 or greater, then dereferences will also work:

$total = $conn->query('select @total')->fetch(PDO::FETCH_ASSOC)['@total'];
Sign up to request clarification or add additional context in comments.

1 Comment

@PabloTobar sure glad this hellped
0

You can do either of these.

This is simply how to address an item in an array.

echo $r[0];

or

echo $r['@total']

Or it might be better to do

$r = $conn->query('select @total as total')->fetch();

echo $r['total']

as I am not sure if PHP would like an @ symbol in an array occurance.

1 Comment

It does accept the @, thanks for the answer, I guess this helps for more than one output parameter

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.