在 PHP 上调用 MySQL 存储过程

Posted

技术标签:

【中文标题】在 PHP 上调用 MySQL 存储过程【英文标题】:Calling MySQL Stored Procedure on PHP 【发布时间】:2013-06-09 02:58:26 【问题描述】:

我无法让我的存储过程或视图从数据库中检索内容。我不知道我的存储过程或视图是否有效,但我知道没有处理这些工作的 php。 请,谢谢!

下面是我的视图和存储过程。

CREATE VIEW viewActRole AS
SELECT `tblMovie`.`MovieName`, `tblActor`.`ActFirstName`, `tblActor`.`ActLastName`,    `tblRole`.`Role` 
FROM `tblRole`, `tblActor`, `tblMovie` 
WHERE `tblRole`.`ActID` = `tblActor`.`ActID` AND `tblRole`.`MovieID`=`tblMovie`.`MovieID`;


DELIMITER $$

CREATE PROCEDURE `lookUpMovie`(IN `actorNameVAR` INT)
BEGIN
SELECT * FROM `viewActRole` WHERE `viewActRole`.`MovieID` = `actorNameVAR`;
END$$

DELIMITER ; 

下面是我的 php 代码。我知道在添加存储过程之前一切正常。

<?php
$mysqli = new mysqli("BLAH", "BLAH", "BLAH", "BLAH");

$dd = $_POST['displaydropdown'];

// used fixed-width font
echo "<pre>\n";
$sp = "CALL lookUpMovie(".$dd.")";
// Get person likes for
echo "$sp";
$r1 = $mysqli->query($sp);

$r2 = mysql_query("SELECT C.MovieName, B.ActFirstName, B.ActLastName, A.Role 
    FROM tblRole A, tblActor B, tblMovie C WHERE A.ActID = B.ActID AND A.MovieID=C.MovieID AND A.MovieID = '$dd'");
$result2 = mysql_fetch_array($r2);

echo "Albums of Artist: $result2[0]\n";
$fmt = "%-20s %-20s %-20s %-20s \n";
printf($fmt, "Movie Name", "Actor First Name", "Actor Last Name", "Role");

// loop over courses, printing each one
while ($result = mysql_fetch_array($r1))
 
    printf($fmt,$result[0], $result[1], $result[2], $result[3]);


// free result set
mysql_free_result($r1);

echo "</pre>\n";
?>

【问题讨论】:

调用过程时实际发生了什么?你得到一个空的返回集,一个错误吗?您是否尝试过从 mysql 客户端调用该过程?请提供更多信息。 当我回显 $sp 时,我得到“CALL lookUpMovie(1)”。 1 已修正。回显 $r1 时,我什么也得不到。 你不能回显 $r1 因为 $mysqli->query() 返回一个对象。试试我在回答中建议的更改,看看会发生什么。 【参考方案1】:

看起来您正在混合和匹配 mysqli 面向对象的调用与已弃用的 mysql_* 函数。我不确定你能做到这一点。

你正在做:

$r1 = $mysqli->query($sp)

然后将其传递给

mysql_fetch_assoc($r1);

遍历你的结果,你需要做:

while ($result = $r1->fetch_array())
 
    printf($fmt,$result[0], $result[1], $result[2], $result[3]);

【讨论】:

当我这样做时,会出现一个错误,它不会出现任何低于该值的内容。此处显示:img7.imageshack.us/img7/2412/46925204.jpg 是有错误还是存储过程没有返回结果?您是否从 mysql 客户端运行存储过程以确保获得预期结果? 我用的是mysqlworkbench,没有报错。他们被添加没有问题。视图中使用的 Select 语句有效。 这实际上是一个要求我们使用存储过程的作业......教授没有教他们很好。我将测试视图。看看这是否有效。 那么,在工作台中,如果你执行 'CALL lookUpMovie(1)' 它会给你预期的结果?

以上是关于在 PHP 上调用 MySQL 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

php调用mysql存储过程

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

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

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

使用 PHP PDO 调用 MySQL 存储过程 [重复]

mysql的存储过程和触发器的使用 以及php中的调用方法