我有一个MySQL函数,如下所示:
delimiter #
create function activate_user
(
p_activation_hash char(32)
)
returns int
deterministic
begin
declare v_ret int unsigned default 0;
if (char_length(p_activation_hash) != 32) then
return 0;
end if;
insert ignore into users (email, password_hash, first_name, last_name, company_name)
select email, password_hash, first_name, last_name, company_name
from user_activation
where activation_hash = p_activation_hash
and expiry_date > now();
return last_insert_id();
end #
delimiter ;
如果我用CodeIgniter:这样称呼它
$query = $this->db->query("select activate_user(?);", array($this->input->get('key')));
var_dump($query->result_object());
var_dump($query->result_array());
我可以得到一个数组或结果对象,看起来像这样:
array
0 =>
object(stdClass)[16]
public 'activate_user('5c9835e8dee7e1b43691708f503cb7f5')' => string '0' (length=1)
array
0 =>
array
'activate_user('5c9835e8dee7e1b43691708f503cb7f5')' => string '0' (length=1)
很明显,由于钥匙的原因,它不是很有用,我真的不想做前臂,似乎应该有更好的方法吗?
我认为mysql函数的一大优点是可以返回整数之类的东西,但在php中读取这些整数似乎很混乱,我是不是遗漏了什么?
对于您的信息,这是我得到的最简洁的:
$query = $this->db->query("select activate_user(?) as user_result;", array($this->input->get('key')));
$result = current($query->result_array());
echo "function result: " . $result['user_result'];
结果显示函数返回零。如果你给函数调用取别名,你可能会有一个更合理的时间来读取结果:
$query = $this->db->query("select activate_user(?) AS user_result;", array($this->input->get('key')));
现在,函数调用被别名为user_result的列名,无需键即可轻松读取。然后您可以将结果读取为:
$result = $query->result_array();
echo "function result = " . $result['user_result'];
问题不在于MySQL函数,而在于PHP中的query()
函数。
尝试指定单一来源:
$query = $this->db->query("select activate_user(?);", $this->input->get('key'));
看看这是否有帮助。您可以使用AS
来简化返回值:
SELECT activate_user(?) as status;
否则,您可能会尝试
$value = (int)(array_values($query[0])[0])
访问数组的第一个键的第一个子项的第一个元素,或者类似的东西。你可能不得不把它写成
$values = array_values($query[0]);
$value = (int)$values[0]