首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL存储过程:'field list‘中的未知列'Table_Name’

MySQL存储过程:'field list‘中的未知列'Table_Name’
EN

Stack Overflow用户
提问于 2014-03-25 02:31:34
回答 1查看 1.8K关注 0票数 1

我目前正在尝试使用以下命令创建我的第一个存储过程:

代码语言:javascript
运行
复制
DELIMITER $$

CREATE PROCEDURE  `GetNumRows` ( IN tab_name VARCHAR( 40 ) )
BEGIN 
SET @t1 = CONCAT(  'SELECT COUNT(*) FROM ', tab_name) ;

PREPARE stmt3 FROM @t1 ;

EXECUTE stmt3;

DEALLOCATE PREPARE stmt3;

END$$

并用这个来调用它:

代码语言:javascript
运行
复制
$query = $this->mysqli->query("CALL GetNumRows($this->tableName)");
if($query == false)
{
    die("mySQLi Error: ".$this->mysqli->error);
}

很明显,我甚至不能通过这个,我得到了这个死:

代码语言:javascript
运行
复制
mySQLi Error: Unknown column 'gps_location' in 'field list'

如何修改我的存储过程,以允许传入表名并获得行数。

EN

回答 1

Stack Overflow用户

发布于 2014-03-25 02:43:07

如下所示创建SP。这很可能是因为没有在正确的数据库中查找。

代码语言:javascript
运行
复制
DELIMITER $$ 
CREATE PROCEDURE  `GetNumRows` (IN database_name VARCHAR(50), 
IN tab_name VARCHAR(40) )
BEGIN 

SET @t1 = CONCAT('SELECT COUNT(*) FROM ',database_name,'.', tab_name,';');
PREPARE stmt3 FROM @t1 ;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;

END$$

并确保调用参数用'包装。我不确定如何在php中包含‘,但我相信你知道:)

代码语言:javascript
运行
复制
CALL GetNumRows('$this->tableName')

编辑

现在我已经改变了,所以数据库名也可以作为参数传递。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22617742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档