这是我的问题:我想将此查询放入存储过程:
从 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 运行。 任何想法都会受到欢迎。 谢谢。
最佳答案
“调用”不起作用有几个原因。
最常见的是您忘记将多语句支持放入 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
This is because each CALL returns a result to indicate the call status, in addition to any result sets that might be returned by statements executed within the procedure
你也可以尝试
执行 get_registers('var1','var2')
如果上述方法不起作用。
关于php - 使用变量表和更多参数从 php 调用 mysql 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057430/