从 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 中的存储过程中获取值的主要内容,如果未能解决你的问题,请参考以下文章
PHP如何调用SQLServer2012的存储过程并获取返回结果集及出参?
如何php调用oracle存储过程返回的是一个结果集,该怎么从php页面中吧数据循环输出呀