Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字段有空格时MySQL准备语句不工作_Mysql_Dynamic_Prepared Statement - Fatal编程技术网

字段有空格时MySQL准备语句不工作

字段有空格时MySQL准备语句不工作,mysql,dynamic,prepared-statement,Mysql,Dynamic,Prepared Statement,我试图创建以下准备好的语句,该语句将为透视表输出动态行。如果“Name”字段没有空格,则我的语句有效。但是,当我向其中添加空间时(例如,Project Strength Site Coordinator),我会收到以下错误: “您的SQL语法有错误;请检查以下手册: 对应于您的MySQL服务器版本,以便使用正确的语法 近强度现场协调员,最大值(如果(名称= 第1行的“TeenEatsSiteCoordinator”,名称,NULL)):从 @sql“ 我试着研究这个问题,但没有发现任何东西 这是

我试图创建以下准备好的语句,该语句将为透视表输出动态行。如果“Name”字段没有空格,则我的语句有效。但是,当我向其中添加空间时(例如,Project Strength Site Coordinator),我会收到以下错误:

“您的SQL语法有错误;请检查以下手册: 对应于您的MySQL服务器版本,以便使用正确的语法 近强度现场协调员,最大值(如果(名称= 第1行的“TeenEatsSiteCoordinator”,名称,NULL)):从 @sql“

我试着研究这个问题,但没有发现任何东西

这是一本书

谢谢你能给我的帮助

CREATE TABLE `Contacts` (
  `Contact_Id` int(11) unsigned NOT NULL,
  `First_Name` varchar(50) NOT NULL,
  `Last_Name` varchar(50) NOT NULL
);

insert into Contacts values (1, 'John', 'Doe');
insert into Contacts values (2, 'Jane', 'Doe');

CREATE TABLE `Contact_Types` (
  `Contact_Type_Id` int(11) unsigned NOT NULL,
  `Name` varchar(50) NOT NULL
);

insert into Contact_Types values (1, 'ProjectStrengthSiteCoordinator');
insert into Contact_Types values (2, 'TeenEatsSiteCoordinator');

CREATE TABLE `Contacts_Contact_Types` (
  `Contact_Id` int(11) unsigned NOT NULL DEFAULT '0',
  `Contact_Type_Id` int(11) unsigned NOT NULL DEFAULT '0'
);

insert into Contacts_Contact_Types values (1, 1);
insert into Contacts_Contact_Types values (1, 2);
insert into Contacts_Contact_Types values (2, 1);

SET @sql = NULL;

SELECT
 GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(Name = ''',
      Name,
      ''', Name, NULL)) AS ',
      Name
    )
  ) INTO @sql
from Contact_Types;

SET @sql = CONCAT('SELECT c.First_Name, ', @sql, ' from Contacts c
left join Contacts_Contact_Types cct
  on c.Contact_Id = cct.Contact_Id
left join Contact_Types ct
  on cct.Contact_Type_Id = ct.Contact_Type_Id
group by c.Contact_Id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

您需要在
部分将其转义为
部分:

SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(Name = ''', Name, ''', Name, NULL)) AS `', Name, '`'
                                   )
                   ) INTO @sql
from Contact_Types;

请注意,
group_concat()
接受多个参数,因此严格来说,嵌套的
concat()
是不必要的。

您需要在backticks中用空格包装字段名。@RocketHazmat我更新了代码,并在backticks中包装了名称字段。然而,我仍然收到相同的错误。谢谢你的快速回复。谢谢!成功了。感谢您对
concat()
的反馈。我会把它处理掉的。很好的一天!