php - 使用变量表和更多参数从 php 调用 mysql 存储过程

标签 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 运行。 任何想法都会受到欢迎。 谢谢。

最佳答案

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

最常见的是您忘记将多语句支持放入 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/

相关文章:

php - Symfony2 FOSUserBundle 文件上传(个人资料图片)提示?

mysql - Apache Solr 索引与类似 RDBMS 的引用

python - Django 原始查询用法

php - 转换 unix 时间戳 php

php - 如何检查表单并使用帖子值自动重定向到 Paypal ?

php - 无法使用 phpseclib 在 MySQL 中运行 SQL 查询

php - strtotime 1 个月或更早的问题

mysql - sql查询获取用户的下车点

php - 从 mysql 数据库中检索数据到下拉列表

javascript - 将html选择值传递给JS对象