在 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 存储过程的主要内容,如果未能解决你的问题,请参考以下文章