40

I have stored procedure that I created in MySQL and want PHP to call that stored procedure. What is the best way to do this?

-MySQL client version: 4.1.11
-MySQL Server version: 5.0.45

Here is my stored procedure:

DELIMITER $$

DROP FUNCTION IF EXISTS `getNodeName` $$
CREATE FUNCTION `getTreeNodeName`(`nid` int) RETURNS varchar(25) CHARSET utf8
BEGIN
 DECLARE nodeName varchar(25);
 SELECT name into nodeName FROM tree
 WHERE id = nid;
 RETURN nodeName;
END $$

DELIMITER ;

What is the PHP code to invoke the procedure getTreeNodeName?

2
  • Walkthrough on creating a MySQL stored procedure: stackoverflow.com/a/20433501/445131 Commented Dec 6, 2013 at 21:25
  • That's not a procedure (call procedurename), its a function (SELECT functioname(args)) Commented Jan 17, 2024 at 15:50

4 Answers 4

56

I now found solution by using mysqli instead of mysql.

<?php 

// enable error reporting
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
//connect to database
$connection = mysqli_connect("hostname", "user", "password", "db", "port");

//run the store proc
$result = mysqli_query($connection, "CALL StoreProcName");

//loop the result set
while ($row = mysqli_fetch_array($result)){     
  echo $row[0] . " - " . + $row[1]; 
}

I found that many people seem to have a problem with using mysql_connect, mysql_query and mysql_fetch_array.

Sign up to request clarification or add additional context in comments.

Comments

13

You can call a stored procedure using the following syntax:

$result = mysql_query('CALL getNodeChildren(2)');

2 Comments

+1 because it worked, however mysql_query stopped working for all following select statements.
I assume that you can also add a variable like this: $result = mysql_query('CALL getNodeChildren($a)');
4

This is my solution with prepared statements and stored procedure is returning several rows not only one value.

<?php

require 'config.php';
header('Content-type:application/json');
$connection->set_charset('utf8');

$mIds = $_GET['ids'];

$stmt = $connection->prepare("CALL sp_takes_string_returns_table(?)");
$stmt->bind_param("s", $mIds);

$stmt->execute();

$result = $stmt->get_result();
$response = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($response);

$stmt->close();
$connection->close();

Comments

1
<?php
    $res = mysql_query('SELECT getTreeNodeName(1) AS result');
    if ($res === false) {
        echo mysql_errno().': '.mysql_error();
    }
    while ($obj = mysql_fetch_object($res)) {
        echo $obj->result;
    }

4 Comments

It works for the first question when the store procedure returns only one value, but the code for the multiple results does not work. Any idea?
@user480259, Ive modified the snippet I gave you to include error checking. Try that and see what you get.
It said: "1305: FUNCTION getNodeChildren does not exist". I checked the database and it did exist and when i run it got the result as well. But it is a procedure not a function. Does that matter?
I changed the code from "SELECT" to "CALL", then I got this error: "1312: PROCEDURE proc-name can't return a result set in the given context".

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.