1

这是我的 php 代码

<?php
$code='1,2,3';
$this->db->query("CALL SP_db(\"$code\"));
?>

如果var_dump($code)我得到这个string(5) "1,2,3"

这是我的存储过程代码

CREATE DEFINER=`test`@`localhost` PROCEDURE `SP_db`(v_company varchar(10))

begin

select * from blabla where company_id in (v_company);
.
.
.

如果我使用此代码,我使用此代码将一些值插入到表中,我从 php 获取 v_company 它不起作用

但是如果我尝试填充它的值

CREATE DEFINER=`test`@`localhost` PROCEDURE `SP_db`(v_company varchar(10))

    begin

    select * from blabla where company_id in (1,2,3);

但是 php 发送的值是由存储过程接收的,我尝试将 v_company 值保存到表中以确保它可以工作

因为来自 php 的值输入到表中

所以有人可以告诉代码错在哪里

4

2 回答 2

2

当您将 '1,2,3' 传递给您的过程时,您会得到一个字符串,并且您的查询变为

select * from blabla where company_id in ('1,2,3');

不是

select * from blabla where company_id in (1,2,3);

您可以使用find_in_setinstedin

select * from blabla where find_in_set(company_id, v_company);

但它不会像使用索引那样好in

于 2012-11-29T09:33:24.813 回答
0

我想你不见了"

$this->db->query("CALL SP_db(\"$code\") ");

或者试试这个

$this->db->query("CALL SP_db('".$code."') ");
于 2012-11-29T09:28:32.027 回答