“mysql_num_rows for Resource id#18:659”AND YET“mysql_fetch_array():18不是有效的MySQL结果资源”一行之后

时间:2014-05-22 02:50:21

标签: php mysql

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语句的评论。

0 个答案:

没有答案