MySQL存储过程:未知列' Table_Name'在'字段列表'

时间:2014-03-24 18:31:34

标签: php mysql stored-procedures

我目前正在尝试创建我的第一个存储过程:

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$$

用这个来称呼它:

$query = $this->mysqli->query("CALL GetNumRows($this->tableName)");
if($query == false)
{
    die("mySQLi Error: ".$this->mysqli->error);
}

显然,我甚至没有超越这个,我就死了:

mySQLi Error: Unknown column 'gps_location' in 'field list'

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

1 个答案:

答案 0 :(得分:1)

像这样创建SP。最有可能的是没有找到合适的数据库。

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$$

确保CALL参数包含'。我不知道如何包括'用PHP,但我相信你知道它:))

CALL GetNumRows('$this->tableName')

修改

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