我有一个页面可以改变MySQL数据库中的大量变量,到目前为止它们都运行良好,但现在所有查询中的所有查询都停止了无缘无故地工作。
我确认了以下内容:
- 在&#34中发布和使用的变量;如果"大门的陈述是按照预期的
- 逻辑门按预期触发(我可以在其内部回显东西等)
- 建立数据库连接,我在同一连接变量上成功运行此逻辑门之前和之后的各种类型的查询
- 连接用户启用了ALL PRIVILEDGES,围绕此逻辑门的上述查询成功使用了类似的功能。
这是逻辑门:
if (!empty($_POST["addqual"])){
$coladqual = $_POST["addqual"];
$sqlf = "ALTER TABLE users ADD UNIQUE ('$coladqual') INT( 2 ) NOT NULL";
$conn->query($sqlf);
$sqlc = "INSERT INTO competencebonus (competence,bonus)
VALUES ($coladqual,0)";
$conn->query($sqlc);
}
我尝试过多次改动,但无论我做什么,他们似乎都无法执行。在这两个之前和之后,我在其他逻辑门中至少有20个其他查询,它们之间似乎几乎没有区别,除了这两个根本不工作之外。
编辑 - 这是错误(感谢所有向我提供错误报告语法的人)
您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在#"' TestAA')INT(2)NOT NULL UNIQUE'中使用正确的语法。第1行
令我感到奇怪的是,只有右括号位于后置输入(TestAA)附近。这应该是两者兼有吗?
我尝试更改语法并收到以下错误:
重复输入' 0'关键字' TestAB'
语法是:
$sqlf = "ALTER TABLE users ADD `$coladqual` INT( 2 ) NOT NULL UNIQUE";
最终编辑:
让它发挥作用。删除了" NOT NULL" Jeff Pucket II推荐的声明。不知何故,这与删除括号和使用反引号而不是撇号相结合使得事情发生了变化。 感谢那些有耐心帮助我的人。
答案 0 :(得分:1)
您似乎正在尝试使用唯一的非空列来更改现有表。如果表中已经存在任何行,我希望这会失败,除非你的引擎归零。即使这样,如果由于唯一约束而存在多个记录,则会失败。还要确保添加的列名称已经存在。
要使用MySQLi获取错误,请尝试:
$result = $conn->query($sqlf) or die($conn->error);
答案 1 :(得分:0)
“唯一”约束应该放在查询的末尾
$sqlf = "ALTER TABLE users ADD ('$coladqual') INT( 2 ) NOT NULL UNIQUE";
错误检查取决于您正在运行的MySQL的风格