我有以下表格:
- 图片来源
- character_trait_annotations
- 性格特征
- 人物
(以及与此问题无关的表格)。我正在尝试使用一个存储过程在 image_sources
中查找 ImageURL
,其中 AnnotationID
等于从代码中随机获取的那个。 AnnotatonID
属于 character_trait_annotations
表,该表还有一个 CharacterID
和一个 CharacterTraitID
。 CharacterID
在characters
表中,表中有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 调用该过程时,出现此错误:无法调用存储过程:“where 子句”中的未知列“CharacterTraitName”
。我能够在事件服务器上毫无怨言地创建存储过程。
我在我自己的机器(数据库的版本,在 phpMyAdmin 中)上本地检查此过程,尝试在那里创建存储过程以查看发生了什么,我收到此错误:# 1064 - 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 7 行的 '' 附近使用的正确语法
我什至尝试用反引号将列名和表名括起来,它告诉我同样的事情。这有什么问题吗?
最佳答案
我想通了;/* “我”是指我的一个 friend */
好的,那你做了什么?
我无法访问 phpMyAdmin、MySQLConnect 或任何其他数据库编辑器,所以我不得不尝试自己制作一个:http://dinotator.biokdd.org/ResearchProject/tableViewer.php .现在,唯一有用的是用于选择表格的下拉菜单。
直到今天我才可以访问它,当我问我的 friend 时,他要了一种查看数据库的方法,我给了他那个。他指出(我应该已经看到)的问题是子查询中的第二个条件:CharacterTraitName =
(SELECT CharacterTraitID FROM character_traits WHERE CharacterTraitName = traitName)
所犯的愚蠢错误是试图检查 CharacterTraitName
和 CharacterTraitID
之间的相等性。此外,CharacterTraitName
列在 character_trait_annotations
中不存在。
echo '我觉得自己很蠢。';
关于php - 存储过程多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185449/