存储过程多问题
Stored Procedure multi-issue
我有以下 tables:
- image_sources
- character_trait_annotations
- character_traits
- 个字符
(和与此问题无关的 table)。我正在尝试使用一个存储过程在 image_sources
中查找 ImageURL
,其中 AnnotationID
等于从代码中随机获取的那个。那个AnnotatonID
属于character_trait_annotations
table,它还有一个CharacterID
和一个CharacterTraitID
。 CharacterID
在characters
table中,CharacterName
,CharacterTraitID
在character_traits
中,CharacterTraitName
。
代码是用$character
、$trait
(分别是CharacterName
、CharacterTraitName
)调用存储过程,并尝试获取ImageURL
为它。
存储过程
程序的SQL代码如下:
CREATE PROCEDURE getImageURL(IN charName VARCHAR(35), IN traitName VARCHAR(100))
BEGIN
SELECT ImageSourceURL FROM image_sources WHERE
AnnotationID = (SELECT AnnotationID FROM character_trait_annotations WHERE CharacterID =
(SELECT CharacterID FROM characters WHERE CharacterName = charName) AND CharacterTraitName =
(SELECT CharacterTraitID FROM character_traits WHERE CharacterTraitName = traitName)
);
END;
但是,当我从 PHP 调用该过程时,出现此错误:Unable to call stored procedure: Unknown column 'CharacterTraitName' in 'where clause'
。我能够在活动服务器上毫无怨言地创建存储过程。
我在我自己的机器(数据库的版本,在 phpMyAdmin 中)上本地检查这个过程,尝试在那里创建存储过程以查看发生了什么,我得到这个错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7
我什至尝试用反引号将列名和 table 名称括起来,它告诉我同样的事情。这有什么问题吗?
我想通了; /* "I",我是说我的一个朋友 */
好的,你做了什么?
我无权访问 phpMyAdmin、MySQLConnect 或任何其他数据库编辑器,因此我不得不尝试自己制作一个:http://dinotator.biokdd.org/ResearchProject/tableViewer.php。现在,唯一有用的是 select 表格的下拉菜单。
直到今天我才可以访问这个,当我问我的朋友时,他要了一种查看数据库的方法,我给了他那个。他指出(我应该已经看到)的问题是子查询中的第二个条件:CharacterTraitName =
(SELECT CharacterTraitID FROM character_traits WHERE CharacterTraitName = traitName)
所犯的愚蠢错误是试图检查 CharacterTraitName
和 CharacterTraitID
之间的相等性。此外,CharacterTraitName
列在 character_trait_annotations
中不存在。
回声'I feel dumb.';
我有以下 tables:
- image_sources
- character_trait_annotations
- character_traits
- 个字符
(和与此问题无关的 table)。我正在尝试使用一个存储过程在 image_sources
中查找 ImageURL
,其中 AnnotationID
等于从代码中随机获取的那个。那个AnnotatonID
属于character_trait_annotations
table,它还有一个CharacterID
和一个CharacterTraitID
。 CharacterID
在characters
table中,CharacterName
,CharacterTraitID
在character_traits
中,CharacterTraitName
。
代码是用$character
、$trait
(分别是CharacterName
、CharacterTraitName
)调用存储过程,并尝试获取ImageURL
为它。
存储过程
程序的SQL代码如下:
CREATE PROCEDURE getImageURL(IN charName VARCHAR(35), IN traitName VARCHAR(100))
BEGIN
SELECT ImageSourceURL FROM image_sources WHERE
AnnotationID = (SELECT AnnotationID FROM character_trait_annotations WHERE CharacterID =
(SELECT CharacterID FROM characters WHERE CharacterName = charName) AND CharacterTraitName =
(SELECT CharacterTraitID FROM character_traits WHERE CharacterTraitName = traitName)
);
END;
但是,当我从 PHP 调用该过程时,出现此错误:Unable to call stored procedure: Unknown column 'CharacterTraitName' in 'where clause'
。我能够在活动服务器上毫无怨言地创建存储过程。
我在我自己的机器(数据库的版本,在 phpMyAdmin 中)上本地检查这个过程,尝试在那里创建存储过程以查看发生了什么,我得到这个错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7
我什至尝试用反引号将列名和 table 名称括起来,它告诉我同样的事情。这有什么问题吗?
我想通了; /* "I",我是说我的一个朋友 */
好的,你做了什么?
我无权访问 phpMyAdmin、MySQLConnect 或任何其他数据库编辑器,因此我不得不尝试自己制作一个:http://dinotator.biokdd.org/ResearchProject/tableViewer.php。现在,唯一有用的是 select 表格的下拉菜单。
直到今天我才可以访问这个,当我问我的朋友时,他要了一种查看数据库的方法,我给了他那个。他指出(我应该已经看到)的问题是子查询中的第二个条件:CharacterTraitName =
(SELECT CharacterTraitID FROM character_traits WHERE CharacterTraitName = traitName)
所犯的愚蠢错误是试图检查 CharacterTraitName
和 CharacterTraitID
之间的相等性。此外,CharacterTraitName
列在 character_trait_annotations
中不存在。
回声'I feel dumb.';