栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL从PHP PDO中的存储过程中检索变量

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL从PHP PDO中的存储过程中检索变量

事实证明,这是自2005年以来已经存在很长时间的错误!

这是原始的错误报告:2005年到2013年。这是新的错误报告:从2013年至今。

有多种方法可以返回答案,我找到了其中一种并进行了演示…

“技巧”是从“ mysql”过程获取输出。这是一个“两阶段”过程。

  • 第一部分是使用您的输入来运行该过程,并告诉它要在其中存储结果的MYSQL变量。

  • 然后,您运行一个单独的查询来“选择”那些“ mysql”变量。

在这里很清楚地描述了它:php-calling-mysql-stored-
procedures

更新(2017年1月):

这是一个示例,显示Mysql过程参数的“ IN”,“ INOUT”和“ OUT”变量的用法。

在我们开始之前,有一些技巧:

  • 开发时:以“仿真模式”运行PDO,因为它在确定过程调用中的错误时更可靠。
  • 仅将PHP变量绑定到过程“ IN”参数。

当您尝试将变量绑定到INOUT和OUT参数时,会遇到一些非常奇怪的运行时错误。

像往常一样,我倾向于提供比要求更多的评论;-/

运行时环境(XAMPP):

  • 的PHP:5.4.4
  • MySQL的:5.5.16

源代码:

  • SQL过程
  • PHP与输出

SQL代码:

CREATE PROCEDURE `demoSpInOutSqlVars`(IN     pInput_Param  INT,                INOUT  pInOut_Param  INT,      OUT    pOut_Param    INT) BEGIN         SET pInOut_Param      := ABS(pInput_Param) + ABS(pInOut_Param);      SET pOut_Param        := ABS(pInput_Param) * -3;      END$$

PHP代码:

数据库连接:

$db = appDIC('getDbConnection', 'default'); // get the default db connection$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

注意:输出与

EMULATE_PREPARES
= false 相同。

设置将要使用的所有PHP变量:

$phpInParam     = 5;       $phpInOutParam  = 404;          $phpOutParam    = null;         

定义和准备SQL过程调用:

$sql = "call demoSpInOut(:phpInParam,    @varInOutParam,    @varOutParam)"; $stmt = $db->prepare($sql);

绑定PHP变量并设置SQL变量:

  • 1)绑定PHP变量

$ stmt-> bindParam(’:phpInParam’,$ phpInParam,PDO :: PARAM_INT);

  • 2)设置SQL User INOUT变量

$ db-> exec(“ SET @varInOutParam = $ phpInOutParam”);
//这很安全,因为它只是将值设置为MySql变量。

执行以下步骤:

$allOk = $stmt->execute();

将SQL变量放入PHP变量中:

$sql = "SELECt @varInOutParam AS phpInOutParam,    @varOutParam   AS phpOutParam        FROM dual";$results = current($db->query($sql)->fetchAll());$phpInOutParam = $results['phpInOutParam'];$phpOutParam   = $results['phpOutParam'];

注意:也许不是最好的方法;-/

显示PHP变量

"$phpInParam:"     => "5""$phpInOutParam:"  => "409""$phpOutParam:"    => "-15"


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号