【发布时间】:2016-05-12 07:35:33
【问题描述】:
我有以下 MySql 表。
表tblUsg定义如下:
CREATE TABLE `tblUsg` (
`id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`ip` VARCHAR(46) NOT NULL,
`dtm` DATETIME NOT NULL,
`huid` BINARY(32) NOT NULL,
`licnm` VARCHAR(20) NOT NULL,
`lichld` VARCHAR(256) NOT NULL,
`flgs` INT NOT NULL,
`agnt` VARCHAR(256),
INDEX `ix_huid` (`huid`),
INDEX `ix_licnm` (`licnm`),
UNIQUE KEY `ix_lichuid` (`huid`, `licnm`)
) AUTO_INCREMENT=0 CHARACTER SET utf8 COLLATE utf8_unicode_ci;
而表tblLics 定义如下:
CREATE TABLE `wosLics` (
`id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`licnm` VARCHAR(20) NOT NULL,
`desc` VARCHAR(256) NOT NULL,
`maxcpy` INT NOT NULL,
`dtmFrom` DATETIME,
`dtmTo` DATETIME,
`stat` INT NOT NULL,
UNIQUE KEY `ix_licnm` (`licnm`)
) AUTO_INCREMENT=0 CHARACTER SET utf8 COLLATE utf8_unicode_ci;
然后,当两个表都为空时,我调用以下 PHP 脚本:
$link = @mysql_connect($HOSTNAME, $USERNAME, $PASSWD);
@mysql_select_db($DBNAME);
mysql_set_charset('utf8', $link);
$res = @mysql_query(
"SELECT `maxcpy`, `stat`, `dtmFrom`, `dtmTo` FROM `tblLics` WHERE `licnm`='zbcdefghijklmnopqrsu'\n".
"UNION ALL\n".
"SELECT COUNT(*), NULL, NULL, NULL FROM `tblUsg` WHERE `licnm`='zbcdefghijklmnopqrsu'\n".
"UNION ALL\n".
"SELECT COUNT(*), NULL, NULL, NULL FROM `tblUsg` WHERE (`licnm`='zbcdefghijklmnopqrsu' AND `huid`='a871c47a7f48a12b38a994e48a9659fab5d6376f3dbce37559bcb617efe8662d')"
, $link);
if($res)
{
$row0 = @mysql_fetch_row($res);
$row1 = @mysql_fetch_row($res);
$row2 = @mysql_fetch_row($res);
echo("<br/>0::<br/>");
var_dump($row0);
echo("<br/>1::<br/>");
var_dump($row1);
echo("<br/>2::<br/>");
var_dump($row2);
}
哪个输出这个:
0::
array(4) { [0]=> string(1) "0" [1]=> NULL [2]=> NULL [3]=> NULL }
1::
array(4) { [0]=> string(1) "0" [1]=> NULL [2]=> NULL [3]=> NULL }
2::
bool(false)
我的问题是为什么我的$row2 是false 而$row1 是我所期望的数组?
【问题讨论】:
-
是吗?您是否有记录满足第一个查询中的 where 条件?对于一个空结果和两个记录集,每个记录集有 1 条记录,您的预期输出是什么?
-
@Pred:不,表格最初是空的。在这种情况下,我希望我的
$row0是false。不是这样吗? -
为什么?空+东西=东西。 SQL 不会仅仅因为您在某处有一个空集而重新索引结果。 SQL 应该如何知道第一个查询应该返回 1 条还是 2 条或没有或 10k 条记录?它应该在哪里重新索引记录(并在第一条记录之前填写所有内容)?
-
"在这种情况下,我希望我的
$row0是false" -- SQL 使用集合,它们是 无序 列表.mysql_fetch_row()在没有要返回的行时返回FALSE(因为查询没有返回任何行,或者因为所有行都已获取)。您的查询正好返回 2 行。 -
mysqlPHP 扩展已失效 - 停止使用mysqlPHP extension。它是旧的,自 PHP 5.5 起已弃用,并在 PHP 7.0 中完全删除。请改用mysqli或PDO_mysql。