PHP/MySQL查询停止工作没有明显的原因

问题描述:

我有一个页面,改变了我的MySQL数据库中的大量变量,到目前为止他们都工作得很好,但现在所有查询里面的一个单一的逻辑门已经停止工作,没有明显的原因。PHP/MySQL查询停止工作没有明显的原因

我确认:
- 变量发布和使用的“如果”门的说法是因为它的目的
- 该逻辑门被触发为目的(我可以重复的东西,等里面)。
- 建立了数据库连接,我成功地在相同连接变量上的这个逻辑门之前和之后运行各种类型的查询。
- 连接用户启用了所有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'附近使用正确的语法)在第1行INT(2)NOT NULL UNIQUE'

让我觉得奇怪的是只有右括号是围绕帖子输入(TestAA)。它应该有两个还是两个都没有?

我试图改变的语法,并得到了以下错误:

重复条目 '0' 键 'TestAB'

的语法是:

$sqlf = "ALTER TABLE users ADD `$coladqual` INT(2) NOT NULL UNIQUE"; 

最后编辑:

使它工作。删除Jeff Pucket II推荐的“NOT NULL”语句。不知怎的,这与删除括号并使用反引号而不是撇号结合使用起作用。 谢谢你们的耐心帮助我。

+5

错误检查应始终先到位。自我教育是最强大的。 – Rottingham

+3

您应该检查查询是否成功执行。如果失败了,'$ conn'将能够报告它。 (你应该指定你使用的是PDO还是MySQLi。) – Arjan

+0

MySQLi。 我将如何去添加一个错误报告给这些查询? 我在过去一年中找到的所有示例都使用完全不同的查询格式。 – noobequaltotrue

它看起来像你试图改变一个现有的表与唯一非空列。如果表中已经存在任何行,我希望这会失败,除非您的引擎归零。即使如此,如果由于独特的约束而存在多于一条记录,则这将失败。还要确保添加的列名不存在。

要获得使用库MySQLi错误,请尝试: $result = $conn->query($sqlf) or die($conn->error);

+0

我试过没有NOT NULL,没有UNIQUE,没有两个。它不适用于3种变体中的任何一种。 此外,更简单的“INSERT INTO”查询也无法正常工作。 – noobequaltotrue

+0

好吧,我回来了。对不起,我的时区是午夜,我一直编程了10个小时,脑子被炸得很厉害! 感谢您的错误代码,将立即尝试。 – noobequaltotrue

的“独一无二”的约束应该在查询结束

$sqlf = "ALTER TABLE users ADD ('$coladqual') INT(2) NOT NULL UNIQUE"; 

错误检查决定于你是什么味道的MySQL运行

+0

没有工作。我不确定你的意思是“味道”。我正在使用WAMP设置,因此我没有花太多时间查看软件。 – noobequaltotrue

+0

我主要在想MySQLi vs MySQL。 MySQL错误报告文档在这里http://php.net/manual/en/function.mysql-error.php 你的语法通常看起来像你使用MySQLi,如本文档http://php.net/manual/en /mysqli.error.php 是否有可能在MySQL数据库上运行MySQLi函数? – dg4220

+0

试试这种方式,看看你得到了什么 $ add_col = mysql_query($ sqlf,$ conn); echo mysql_error($ add_col); – dg4220