php中的多用户查询
我有一个包含两个表的数据库“test” 以下是phpmyadmin转储:php中的多用户查询,php,mysqli,phpmyadmin,Php,Mysqli,Phpmyadmin,我有一个包含两个表的数据库“test” 以下是phpmyadmin转储: CREATE TABLE IF NOT EXISTS `tags` ( `name` varchar(100) NOT NULL, `id` int(4) NOT NULL, KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `tags` -- INSERT INTO `tags` (`nam
CREATE TABLE IF NOT EXISTS `tags` (
`name` varchar(100) NOT NULL,
`id` int(4) NOT NULL,
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Dumping data for table `tags`
--
INSERT INTO `tags` (`name`, `id`) VALUES
('tag_one', 1),
('tag_two', 1),
('tag_three', 1);
-- --------------------------------------------------------
--
-- Table structure for table `tags_used`
--
CREATE TABLE IF NOT EXISTS `tags_used` (
`name` varchar(100) NOT NULL,
`used` int(4) NOT NULL,
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Dumping data for table `tags_used`
--
INSERT INTO `tags_used` (`name`, `used`) VALUES
('tag_one', 10),
('tag_three', 10),
('tag_two', 10);
下面是php代码:
<?php
$mysqli = new mysqli('127.0.0.1', 'root', 'pass', 'test');
if ($mysqli->connect_error) {
echo 'Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error;
}
else {
$query = <<<SQL
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_one' AND `tags`.`id` = '1';
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_one';
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_two' AND `tags`.`id` = '1';
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_two';
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_three' AND `tags`.`id` = '1';
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_three';
SQL;
$query = trim($query);
$mysqli->multi_query($query);
$mysqli->close();
}
?>
1连接-这是我的代码
2连接-它是phpmyadmin的“刷新”
php日志中没有错误
这是一个备用代码。原来如此。在此代码之前或之后没有任何查询。您应该检查您的错误日志,并可能在此处发布部分错误日志?因为这似乎是多重查询函数的一个怪癖。除了操作系统win server 2008之外,我用几乎相同的配置尝试了你的代码,结果成功了。我还尝试将其修改为六个不同的查询,并且它也起到了作用 我已尝试将查询更改为以下内容:
$query = <<<SQL
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_one' AND `tags`.`id` = '1';
COMMIT;
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_one';
COMMIT;
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_two' AND `tags`.`id` = '1';
COMMIT;
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_two';
COMMIT;
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_three' AND `tags`.`id` = '1';
COMMIT;
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_three';
COMMIT;
SQL;
希望它对您有用SQL很好,所以在multi_查询中一定有我不熟悉的东西,或者您有其他查询可能会将它添加回db。看起来可能有一些奇怪的。。。查看评论。另外,请检查max_allowed_数据包是否适合我:Ubuntu 10.04;MySQL 5.1.41-3ubuntu12.6;PHP 5.3.2-1ubuntu4.2;Apache/2.2.14将这六个查询打包成一个字符串而不是逐个发送六个查询有什么好处吗?这是一个备用代码。原来如此。这段代码前后没有任何查询。我添加了mysql日志。php日志是清晰的。看,没有半柱;在我的查询结束时,也没有“退出”命令。看起来不太好,我迷路了。。。由于它是InnoDB,您可以尝试将查询更改为我在上面编辑的查询。。它对我有用
$query = <<<SQL
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_one' AND `tags`.`id` = '1';
COMMIT;
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_one';
COMMIT;
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_two' AND `tags`.`id` = '1';
COMMIT;
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_two';
COMMIT;
DELETE FROM `tags` WHERE `tags`.`name` = 'tag_three' AND `tags`.`id` = '1';
COMMIT;
UPDATE `tags_used` SET `used` = used-1 WHERE `tags_used`.`name` = 'tag_three';
COMMIT;
SQL;