从php用变量表和更多param调用mysql存储过程

时间:2018-03-01 19:37:16

标签: php mysql

这是我的问题:我想把这个查询放到商店程序中:

从var1中选择col1,col2,其中site_cluster = var2;

我创建了这样的程序:

delimiter $$
drop procedure if exists get_register$$
CREATE procedure get_registers(IN var1 VARCHAR(15),IN var2 VARCHAR(15))
BEGIN
DECLARE l_sql_stmt varchar (100);
SET @l_sql_stmt = CONCAT('SELECT col1,col2 from ',var1," where site_cluster='",var2,"'");
SELECT @l_sql_stmt;
prepare stmt from @l_sql_stmt;
execute stmt; 
END $$
DELIMITER ;

从php我做:

###connection to db is defined in other class####
$query = "call get_registers('var1','var2')"; 
    if($result = $this->connection->query($query)){
        while($row = $result->fetch_array()){
            $register_array[$row['col1']]['col2']=$row['col1'];
            $register_array[$row['col1']]['col2']=$row['col2'];
        }
        return $register_array;
    }

所以...... 执行时 调用get_enbs('var1','var2'); 它是从mysql cli工作,我无法从PHP工作。 任何想法都会很好。 感谢。

1 个答案:

答案 0 :(得分:0)

“呼叫”不起作用有几个原因。

最常见的是你忘了在你的mysql_connect函数中添加多语句支持。像这样:

$ this-> connection = mysql_connect($ this-> host,$ this-> user,$ this-> passw,false,65536);

这直接来自调用文档mysql https://dev.mysql.com/doc/refman/5.7/en/call.html

  

这是因为每个CALL都返回一个结果来指示调用状态,以及可能由过程中执行的语句返回的任何结果集

您也可以尝试

执行get_registers('var1','var2')

相反,如果上述方法不起作用。