首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程,MySQL和PHP

存储过程,MySQL和PHP
EN

Stack Overflow用户
提问于 2008-09-23 00:54:38
回答 5查看 12.8K关注 0票数 3

这个问题是一个相当开放的问题。我在MS SQLServer和经典的ASP和ASP.net中使用存储过程已经有一段时间了,我非常喜欢它们。

我有一个小的爱好项目,我正在工作,由于各种原因,我已经放弃了灯的路线。在MySQL和PHP5中使用存储过程有什么提示/技巧/陷阱或良好的起点吗?我的MySQL版本支持存储过程。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-23 10:36:03

忘了mysqli吧,它比PDO更难用,应该已经被删除了。它确实引入了对mysql的巨大改进,但要在mysqli中达到同样的效果,有时需要付出巨大的努力才能超越PDO,即关联fetchAll

相反,我们应该看看PDO,特别是 prepared statements and stored procedures

代码语言:javascript
复制
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

// call the stored procedure
$stmt->execute();

print "procedure returned $value\n";
票数 4
EN

Stack Overflow用户

发布于 2010-12-22 02:17:27

@michal kralik -不幸的是,PDO使用的MySQL C应用程序接口有一个错误,这意味着在MySQL的一些版本上运行你的代码会导致错误:

“语法错误或访问冲突: 1414例程$procedure_name的OUT或INOUT参数$parameter_number不是变量或新的伪变量”。

你可以在bugs.mysql.com上看到错误报告。这个问题已经在5.5.3+ & 6.0.8+版本中得到了修复。

要解决此问题,您需要将in和out参数分开,并使用用户变量存储结果,如下所示:

代码语言:javascript
复制
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(:in_string, @out_string)");
$stmt->bindParam(':in_string', 'hello'); 

// call the stored procedure
$stmt->execute();

// fetch the output
$outputArray = $this->dbh->query("select @out_string")->fetch(PDO::FETCH_ASSOC);

print "procedure returned " . $outputArray['@out_string'] . "\n";
票数 7
EN

Stack Overflow用户

发布于 2008-09-23 01:13:45

您需要使用MySQLI (MySQL改进的扩展)来调用存储过程。下面是调用SP的方法

代码语言:javascript
复制
$mysqli = new MySQLI(user,pass,db);

$result = $mysqli->query("CALL sp_mysp()");

使用SPs时,您需要关闭第一个结果集,否则将收到一个错误。以下是更多信息:

http://blog.rvdavid.net/using-stored-procedures-mysqli-in-php-5/ (断开的链接)

或者,您可以使用预准备语句,我发现它非常简单:

代码语言:javascript
复制
  $stmt = $mysqli->prepare("SELECT Phone FROM MyTable WHERE Name=?");

  $stmt->bind_param("s", $myName);

  $stmt->execute();

MySQLI文档:http://no.php.net/manual/en/book.mysqli.php

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/118506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档