通过PHP发送的MySQL Query不起作用,但可以在Workbench中使用

时间:2017-05-31 13:28:26

标签: php mysql pdo

我有一个基本的插入语句,我想通过PHP执行:

INSERT INTO Ability_to_PermissionLevel (Ability_to_PermissionLevel_Ability_FK, Ability_to_PermissionLevel_PermissionLevel_FK)
VALUES (0, 2)

我必须发送查询的PHP代码是:

$query = 'INSERT INTO Ability_to_PermissionLevel (Ability_to_PermissionLevel_Ability_FK, Ability_to_PermissionLevel_PermissionLevel_FK)
          VALUES (:id, :p);';
$statement = $pdo->prepare($query);
$statement->bindValue(":id", $ability);
$statement->bindValue(":p", $p);
$statement->execute();

由于某种原因,没有任何内容插入数据库,但它不返回任何错误。我想到的第一件事是我可能会以某种方式弄乱大写,因为我之前已经这样做了,但我一遍又一遍地检查,并没有发现任何形式的差异。它在代码之前正确地执行了一些查询,所以它不应该是不正确地建立连接的任何东西。我想也许是因为主键没有设置,即使它是自动递增的,所以我尝试了这个:

INSERT INTO Ability_to_PermissionLevel (Ability_to_PermissionLevel_OID, Ability_to_PermissionLevel_Ability_FK, Ability_to_PermissionLevel_PermissionLevel_FK)
          VALUES (DEFAULT, 0, 2);

仍然没有运气。我为了调试设置了一个通用日志,它确认它正在被正确地发送到数据库。这是一般日志中的内容:

458 Query   INSERT INTO Ability_to_PermissionLevel (Ability_to_PermissionLevel_OID, Ability_to_PermissionLevel_Ability_FK, Ability_to_PermissionLevel_PermissionLevel_FK)
          VALUES (DEFAULT, '0', '2')

将日志中的内容复制并粘贴到工作台时,它可以正常工作。

我对接下来的尝试感到困惑。我认为这是一件简单而明显的事情,我很遗憾,但我不确定它是什么。

编辑:

感谢您提供错误检查的所有帮助。 execute方法返回false但error_get_last没有返回任何错误,所以我尝试了提供的链接中的错误检查步骤,发现错误与设置的数据库约束有关。这没有意义,因为我最初从他们自己连接的表中提取了外键值,但我还是尝试了修复,它完全通过所有错误检查并执行甚至返回true。不幸的是我以前仍然遇到问题,因为它实际上并没有插入任何东西,即使从MySQL常规日志复制并粘贴到工作台实际上是插入它。我的修复有问题吗?这是更新的查询:

$query = "SET @p = (SELECT PermissionLevel_OID
                  FROM PermissionLevels
                  WHERE PermissionLevel_OID = $p);
                  INSERT INTO Ability_to_PermissionLevel (Ability_to_PermissionLevel_Ability_FK, Ability_to_PermissionLevel_PermissionLevel_FK)
                  VALUES ($ability, @p);";

日志返回:

518 Query   SET @p = (SELECT PermissionLevel_OID
                  FROM PermissionLevels
                  WHERE PermissionLevel_OID = 2);
      518 Query INSERT INTO Ability_to_PermissionLevel (Ability_to_PermissionLevel_Ability_FK, Ability_to_PermissionLevel_PermissionLevel_FK)
                  VALUES (0, @p)

错误返回的唯一约束问题是使用Ability_to_PermissionLevel_PermissionLevel_FK,这就是为什么只能再次拉出它。

我现在在try / catch中进行pdo准备和执行,以及测试execute是否返回true或false。它不再捕获任何东西,并且execute返回true。不幸的是,数据库中没有添加任何内容。就像我之前提到的,我将日志中的内容复制并粘贴到工作台中,并在那里工作。还有什么我可以做的进一步错误检查吗?

0 个答案:

没有答案