如何从PHP代码中调用MySQL存储过程?

如何从PHP代码中调用MySQL存储过程?,php,mysql,stored-procedures,mysqli,user-defined-functions,Php,Mysql,Stored Procedures,Mysqli,User Defined Functions,我在MySQL中创建了一个存储过程,希望PHP调用该存储过程。最好的方法是什么 -MySQL客户端版本:4.1.11 -MySQL服务器版本:5.0.45 以下是我的存储过程: DELIMITER $$ DROP FUNCTION IF EXISTS `getNodeName` $$ CREATE FUNCTION `getTreeNodeName`(`nid` int) RETURNS varchar(25) CHARSET utf8 BEGIN DECLARE nodeName varc

我在MySQL中创建了一个存储过程,希望PHP调用该存储过程。最好的方法是什么

-MySQL客户端版本:4.1.11
-MySQL服务器版本:5.0.45

以下是我的存储过程:

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 ;

调用过程getTreeNodeName的PHP代码是什么?

我现在通过使用
mysqli
而不是
mysql
找到了解决方案

<?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;
    }
<?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]; 
}

可以使用以下语法调用存储过程:

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

这是我的解决方案,其中包含准备语句,存储过程将返回多行,而不仅仅是一个值

<?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();

当存储过程只返回一个值,但多个结果的代码不起作用时,它适用于第一个问题。有什么想法吗?@user480259,我修改了我给你的代码片段,加入了错误检查。试试看你得到了什么,上面写着:“1305:getNodeChildren函数不存在”。我检查了数据库,它确实存在,当我运行它时,也得到了结果。但这是一个过程,而不是一个函数。这有关系吗?我把代码从“SELECT”改为“CALL”,然后我得到了这个错误:“1312:PROCEDURE-proc-name不能在给定的上下文中返回结果集”。许多人犯了错误,因为他们不必费心检查is
if($connection-instanceof-mysqli){}
,就像
if($arr[0]='forget-checking'){}if(is_array($arr)和&isset($arr[0])&$arr[0]=='forget_checking'){}
mysqli_connect在结尾没有or die语句的情况下对我无效:$connection=mysqli_connect(“主机名”、“用户”、“密码”、“数据库”、“端口”)或die(“错误”。mysqli_Error($connection));mysql扩展已弃用,将在以后创建mysql存储过程的演练中删除:+1,因为它工作了,但是mysql\u query停止了对以下所有select语句的工作。我假设您也可以添加这样的变量:$result=mysql\u query('CALL getNodeChildren($a');