【问题标题】:Trouble with mysqli_multi_querymysqli_multi_query 的问题
【发布时间】:2017-06-13 03:02:11
【问题描述】:

我遇到了 mysqli_multi_query 的问题。 我可以INSERT INTO 多次,但只要我包含DELETE,所有后续查询都不起作用。有趣的是,这个查询在粘贴到 phpMyAdmin SQL 框中时可以正常工作。

SET @contact_id := 1; 
INSERT INTO `contacts_tags` (`contact_id`, `tag_id`)
    SELECT * FROM (SELECT @contact_id, 1) AS tmp
    WHERE NOT EXISTS (
        SELECT `contact_id`, `tag_id` FROM `contacts_tags` 
        WHERE `contact_id` = @contact_id AND `tag_id` = 1
        ); 
DELETE FROM `contacts_tags`
    WHERE `contact_id`=@contact_id AND `tag_id` NOT IN (1); 

直到 DELETE 查询的所有查询都按我的 php 代码的预期执行。

添加进一步的查询作为日志(见下文),步骤 1、@contact_id、步骤 2a、步骤 2b 和步骤 2c 都已插入。 “最后一个”没有。 (当然DELETE 也没有。

INSERT INTO `tf_logs` (`query`) VALUES ('Step0');
SET @contact_id := 1; 
INTO `tf_logs` (`query`) VALUES ('Step1');
INSERT INTO `contacts_tags` (`contact_id`, `tag_id`)
    SELECT * FROM (SELECT @contact_id, 1) AS tmp
    WHERE NOT EXISTS (
        SELECT `contact_id`, `tag_id` FROM `contacts_tags` 
        WHERE `contact_id` = @contact_id AND `tag_id` = 1
        ); 
INSERT INTO `tf_logs` (`query`) VALUES (@contact_id); 
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2a'); 
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2b'); 
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2c');
DELETE FROM `contacts_tags`
    WHERE `contact_id`=@contact_id AND `tag_id` NOT IN (1); 
INSERT INTO `tf_logs` (`query`) VALUES ('Last'); 

为了创建这个查询,我将值递增地附加到一个字符串,然后使用mysqli_multi_query,如下所示。为了准确检查变量包含的内容,我已将最终查询通过电子邮件发送给自己。将电子邮件内容复制并粘贴到 phpMyAdmin 中会完全按照预期执行查询。

$queryString = "";
$queryString .= "INSERT INTO `tf_logs` (`query`) VALUES ('Step0'); ";
$queryString .= "
SET @contact_id := $contactId; ";
//...and so on

if(mysqli_multi_query($connection,$queryString)) {
echo "Success.";

$to = "abc@xyz.com";
$subject = "SQL query";
$headers = "From: abc@xyz.com";
mail($to,$subject,$queryString,$headers);
} else {
    echo "Error.";
}

我确定我在这里遗漏了一些明显的东西,但是几天的谷歌搜索让我发疯了。提前致谢!

【问题讨论】:

  • 你能显示你的表定义 - tf_logs
  • 有一个query 列是text 类型。你为什么要问?对我来说,问题似乎在于 DELETE 查询?整个表只是作为一种简单的方法来测试我是否能够插入一个值(也就是说,仔细检查连接是否正常,php 是否执行,并解决我的其余代码的问题所在) .我很乐意删除该表和所有对它的引用!
  • 是否存在阻止删除完成的约束?
  • 感谢@ChrisCaviness。都修好了。请参阅下面的答案。

标签: php mysql mysqli mysqli-multi-query


【解决方案1】:

感谢@Chris Caviness- 正如预期的那样,解决方案很简单! 用户拥有INSERT 权限,但没有DELETE 权限。 已修复且正常工作。

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多