【发布时间】:2018-06-29 10:23:06
【问题描述】:
起初我尝试使用IF NOT EXISTS 执行 SQL 查询,但我总是遇到语法错误,我并不真正理解为什么。但是输入我的标题 stackoverflow 给了我一些关于同一问题的问题。有趣的是,谷歌无法找到它们......无论如何,所以我将查询更改为 Mike 在this Question 中建议的内容。
现在我有以下代码sn-p:
$tblTeam = "INSERT INTO tblTeam (nameTeam, nationID)
SELECT * FROM (SELECT '" . $match_Team[1] . "', (SELECT nationID FROM tblNation WHERE nameNation = '" . $nation_name[1] . "')) AS tmp
WHERE NOT EXISTS (
SELECT nameTeam FROM tblTeam WHERE nameTeam = '" . $match_Team[1] . "'
) LIMIT 1;
INSERT INTO tblTeam (nameTeam, nationID)
SELECT * FROM (SELECT '" . $match_Team[2] . "', (SELECT nationID FROM tblNation WHERE nameNation = '" . $nation_name[2] . "')) AS tmp
WHERE NOT EXISTS (
SELECT nameTeam FROM tblTeam WHERE nameTeam = '" . $match_Team[2] . "'
) LIMIT 1;";
如果我直接在 phpMyAdmin 中使用纯 SQL 语法运行该查询,一切都很好,我会在 tblTeam 中获得我的条目。但是,一旦我尝试通过 PHP 执行此操作,我就会收到以下语法错误:
Error description tblTeam:
您的 SQL 语法有错误; 检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法 在 'INSERT INTO tblTeam (nameTeam, nationalID) SELECT * FROM (SELECT 'B' at line 7
附近使用
我现在有点困惑,因为我看不出问题出在哪里。在我用于调试的示例中,$match_Team[1] 的值是 Serbia,$match_Team[2] 的值是 Brazil。 $nation_name[1] 和 $nation_name[2] 也一样。
编辑:因为@FDavidov 要求,这是 $tblTeam 的内容:
INSERT INTO tblTeam (nameTeam, nationalID) SELECT * FROM (SELECT 'Serbia', (SELECT nationalID FROM tblNation WHERE nameNation = 'Serbia')) AS tmp WHERE NOT EXISTS (SELECT nameTeam FROM tblTeam WHERE nameTeam = 'Serbia')限制 1; INSERT INTO tblTeam (nameTeam, nationalID) SELECT * FROM (SELECT 'Brazil', (SELECT nationalID FROM tblNation WHERE nameNation = 'Brazil')) AS tmp WHERE NOT EXISTS (SELECT nameTeam FROM tblTeam WHERE nameTeam = 'Brazil') LIMIT 1;
【问题讨论】:
-
如何使用行数据代替列名?
-
打印以控制台变量
$tblTeam的内容并将结果附加到您的问题中。 -
我真的不是很有经验,但你不应该选择 column_name 而不是 select $match_team[2] 吗? match_team[2] 里面有列名吗?如果是,您如何在查询结束时进行比较?
-
您是如何尝试运行查询的?您尝试运行 2 条语句,但并非所有调用都支持多查询字符串。
-
@FDavidov 实际上帮助解决了一个问题。 $nation_name 不包含实际的国家。但是,SQL 查询仍然存在语法错误。将
$tblTeam的内容添加到我的问题中。
标签: php mysql sql syntax-error