存储过程多问题

Stored Procedure multi-issue

我有以下 tables:

(和与此问题无关的 table)。我正在尝试使用一个存储过程在 image_sources 中查找 ImageURL,其中 AnnotationID 等于从代码中随机获取的那个。那个AnnotatonID属于character_trait_annotations table,它还有一个CharacterID和一个CharacterTraitIDCharacterIDcharacterstable中,CharacterNameCharacterTraitIDcharacter_traits中,CharacterTraitName

代码是用$character$trait(分别是CharacterNameCharacterTraitName)调用存储过程,并尝试获取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) 所犯的愚蠢错误是试图检查 CharacterTraitNameCharacterTraitID 之间的相等性。此外,CharacterTraitName 列在 character_trait_annotations 中不存在。

回声'I feel dumb.';