从 php 中的存储过程中获取值

Posted

技术标签:

【中文标题】从 php 中的存储过程中获取值【英文标题】:get value from stored procedure in php 【发布时间】:2012-10-14 09:04:09 【问题描述】:

这是我的 SP:

DELIMITER $$

CREATE DEFINER=FUNCTION `test`(p_begin varchar(10),p_end varchar(10),p_code varchar(2)) RETURNS varchar(10) CHARSET latin1
BEGIN
    DECLARE V_ADA VARCHAR(8);
    DECLARE V_LAST VARCHAR(8);
    DECLARE V_NIK  VARCHAR(8);

    select NIK INTO V_NIK from absen where join_date >= p_begin and join_date<= p_end AND company_id=p_code ORDER BY NIK DESC LIMIT 1 ;

    SET V_NIK=V_NIK+1;
    return V_NIK;
END

我正在尝试用 php 获取返回值:

$query=$this->db->query("select test(\"$begin\",\"$end\", \"$code\")")->result();

    var_dump($query);
    die;

结果是:

array(1)  [0]=> object(stdClass)#20 (1)  ["test("2007-01-01","2007-12-31", "1")"]=> string(7) "118"   

我的问题是我想从存储过程(“118”)中获取值,但我不知道如何将对象更改为字符串。

【问题讨论】:

是否可以将您的查询重写为"SELECT test('$begin', '$end', '$code') AS result"?另外,这不是很容易受到 SQL 注入的攻击吗? @raina77ow 我得到了这个对象(CI_DB_mysql_result)#19 (8) ["conn_id"]=> 类型的资源(31) (mysql 链接持久) ["result_id"]=> 资源( 43) 类型 (mysql 结果) ["result_array"]=> array(0) ["result_object"]=> array(0) ["custom_result_object"]=> array(0) ["current_row "]=> int(0) ["num_rows"]=> int(1) ["row_data"]=> NULL 【参考方案1】:

试试这个:

$query=$this->db->query("select test(\"$begin\",\"$end\", \"$code\")")->result();

// Cast object to array (also you can try get_object_vars() to do that)
$query = (array)$query[0];

// Get the last value from array (it the only on so it is OK)
echo end($query);

也许会有所帮助..

【讨论】:

哦,我想他已经离开享受他的解决方案了) @raina77ow 我想从 3 分钟前接受它,但我必须等待 :)【参考方案2】:

如果您需要将对象作为文本发送到其他地方(数据库、javascript 代码),您可以选择序列化、json_encode、XML 转换等等,具体取决于您的具体情况。

【讨论】:

这如何回答这个问题? “我不知道怎么把对象改成字符串。”....这取决于需求。为什么他需要将对象更改为字符串?

以上是关于从 php 中的存储过程中获取值的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 中的存储过程中获取返回值

PHP如何调用SQLServer2012的存储过程并获取返回结果集及出参?

如何php调用oracle存储过程返回的是一个结果集,该怎么从php页面中吧数据循环输出呀

如何从 SQL Server 存储过程中的 3 列中获取 MAX 值?

PHP获取存储过程的返回值

如何从 ASP.NET Core Web API 中的 SQL Server 存储过程中获取返回值