CentOS 6
PHP 5.2
MySQL 5.0.96
mysql结果资源出现问题,一个表中有一列。
我可以查询该表中的所有列,除了*。
除外在每个失败的情况下,我得到mysql_num_rows,但是当我在查询中包含该列时,要求mysql_fetch_array或mysql_fetch_assoc会返回错误。
注意:以下所有查询都可以从命令行完美运行。
奇怪的是,从同一个表中请求数据的后续查询(与此处描述的问题列相同的列)运行良好。
在查询中使用别名时,错误消失......除非我尝试在结果中使用该别名,在这种情况下资源再次失败。
我见过的最奇怪的事情。它必须是PHP和列或其数据的问题,但我找不到任何方法。
首先,表定义:
describe SHIP_OUT;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| SO_ID | int(11) | NO | PRI | NULL | auto_increment |
| SO_TKNM | varchar(64) | YES | | NULL | |
| SO_DATE | varchar(24) | YES | | NULL | |
| SO_BY | varchar(24) | YES | | NULL | |
| SO_PICKER | varchar(32) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
然后使用一列(不是奇怪的一个)进行简单查询:
query: select SO_PICKER from SHIP_OUT
mysql_num_rows for Resource id #18: 659
除了怪异的一行之外,我可以整天都这样做,就像这样:
query: select SO_ID,SO_DATE,SO_BY,SO_PICKER from SHIP_OUT
mysql_num_rows for Resource id #18: 659
让我们添加问题列SO_TKNM:
query: select SO_ID,SO_DATE,SO_BY,SO_PICKER,SO_TKNM from SHIP_OUT
mysql_num_rows for Resource id #18: 659
Warning: mysql_fetch_array(): 18 is not a valid MySQL result resource
不。也许我们只抓住一切?:
query: select * from SHIP_OUT
mysql_num_rows for Resource id #18: 659
Warning: mysql_fetch_array(): 18 is not a valid MySQL result resource
不。我们使用问题列的别名来代替:
query: select SO_TKNM as TKNM from SHIP_OUT
mysql_num_rows for Resource id #18: 659
没有错误! ..但......试图使用那个结果:
while($row=mysql_fetch_array($doq)) {
echo "TKNM: ".$row['TKNM'];
}
产生
query: select SO_TKNM as TKNM from SHIP_OUT
mysql_num_rows for Resource id #18: 659
Warning: mysql_fetch_array(): 18 is not a valid MySQL result resource
Whaaaat?!?!认真。在查询运行之后,数组被分配给变量......然后它会抛出错误。
只是试图抓住那一列产生......你猜对了:
query: select SO_TKNM from SHIP_OUT
mysql_num_rows for Resource id #18: 659
Warning: mysql_fetch_array(): 18 is not a valid MySQL result resource
SO_TKNM
)以防止它被视为命令......但没有快乐。欢迎任何想法,无论多么疯狂或愚蠢。这让我很伤心! TIA。
==编辑:添加PHP代码=====
这是我的PHP代码,首先是原始代码:
$nomatchq = "select SO_TKNM from SHIP_OUT where SO_DATE >= '20140520' AND SO_DATE <= '20140521' order by SO_TKNM";
$doq = mysql($DBName,$nomatchq);
while($row=mysql_fetch_array($doq)) {
echo "TKNM: ".$row['SO_TKNM'];
}
以下是我生成示例输出的方式:
$nomatchq = "select SO_TKNM from SHIP_OUT where SO_DATE >= '20140520' AND SO_DATE <= '20140521' order by SO_TKNM";
echo "query: ".$nomatchq."<br>";
$doq = mysql($DBName,$nomatchq);
echo "mysql_num_rows for ".$doq.": ".mysql_num_rows($doq)."<br>";
while($row=mysql_fetch_array($doq)) {
echo "TKNM:".$row['SO_TKNM'];
}
以下是别名的使用:
$nomatchq = "select SO_TKNM as TKNM from SHIP_OUT where SO_DATE >= '20140520' AND SO_DATE <= '20140521' order by SO_TKNM";
echo "query: ".$nomatchq."<br>";
$doq = mysql($DBName,$nomatchq);
echo "mysql_num_rows for ".$doq.": ".mysql_num_rows($doq)."<br>";
while($row=mysql_fetch_array($doq)) {
echo "TKNM:".$row['TKNM'];
}
对不起,我之前没有发布过PHP代码。有一组方法可以使&#34; mysql()&#34;功能如网站周围的几十个地方所示。对于此服务器的设置方式,这是正常的。
错误对任何人都有意义吗?
有没有理由说mysql_num_rows会返回正确的结果计数,但之后有一行因为mysql_fetch_array或mysql_fetch_assoc没有将资源识别为有效?
如果您需要更多信息,请告诉我。
我很欣赏关于pdo / mysqli / prepared语句的评论。