我有兩個表的數據庫'測試'。php中的multi_query
這裏是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` (`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();
}
?>
執行 'tag_three' 後仍然在tags
表。
而當我通過phpmyadmin運行這個SQL它工作正常。
我錯在哪裏?
MySQL的42年5月1日
PHP 5.3.1
窗口2003
的nginx 0.8.32
MySQL.log
C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld, Version: 5.1.42-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
100821 12:25:52 1 Connect [email protected] on test
1 Query 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'
100821 12:27:37 2 Connect [email protected] on
2 Query SET CHARACTER SET 'utf8'
2 Query SET collation_connection = 'utf8_general_ci'
2 Query SHOW PLUGINS
2 Init DB test
2 Init DB test
2 Query SELECT * FROM `tags`
LIMIT 0, 30
2 Query SHOW TABLE STATUS FROM `test` LIKE 'tags%'
2 Query SELECT COUNT(*) FROM `test`.`tags`
2 Init DB test
2 Init DB test
2 Query SHOW VARIABLES LIKE 'profiling'
2 Query SHOW FULL COLUMNS
FROM `test`.`tags`
2 Quit
1連接 - 它是我的代碼
2連接 - 這是 '刷新' 從phpmyadmin的
PHP中記錄沒有錯誤。
它是代碼。原樣。此代碼之前或之後沒有任何查詢。
的SQL是精細所以一定有什麼東西在multi_query,這我不精通,或你有一些其他的查詢可能會把它添加到標籤回數據庫。 – Hans 2010-08-20 10:13:18
似乎http://php.net/manual/en/mysqli.multi-query.php可能有一些怪癖...檢查出的意見。另外,看看「max_allowed_packet」的東西 – Hans 2010-08-20 10:15:58
它適用於我:Ubuntu 10.04; MySQL 5.1.41-3ubuntu12.6; PHP 5.3.2-1ubuntu4.2; Apache/2.2.14 – Mike 2010-08-20 11:03:11