Php 一行之后的“资源id为18:659的mysql_num_行”和“mysql_fetch_array():18不是有效的mysql结果资源”

Php 一行之后的“资源id为18:659的mysql_num_行”和“mysql_fetch_array():18不是有效的mysql结果资源”,php,mysql,Php,Mysql,CentOS 6 PHP5.2 MySQL 5.0.96 mysql结果资源和一个表中的一列存在问题 我可以查询该表中的所有列,除了一列和* 在每个失败的情况下,我都会得到mysql\u num\u行,但请求mysql\u fetch\u数组或mysql\u fetch\u assoc只会在查询中包含该列时返回一个错误 注意:以下所有查询都可以在命令行中正常工作 此外,从同一个表(与本文描述的问题列相同的列)请求数据的后续查询工作得非常好 在查询中使用别名时,错误会消失。。。除非我尝试在结果中使

CentOS 6 PHP5.2 MySQL 5.0.96

mysql结果资源和一个表中的一列存在问题

我可以查询该表中的所有列,除了一列和*

在每个失败的情况下,我都会得到mysql\u num\u行,但请求mysql\u fetch\u数组或mysql\u fetch\u 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
让我们添加“问题”列,以便:

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
什么?!?!认真地在查询运行之后,数组被分配给一个变量…然后它抛出错误

只要抓住一个专栏就会产生。。。你猜对了:

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,以防止它的名称被视为命令…但没有乐趣。 任何想法,无论多么疯狂或愚蠢简单,都是受欢迎的。这让我快疯了!蒂亚

==编辑:添加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代码。有一组方法可以使mysql发挥作用,如网站周围几十个地方所示。对于服务器的设置方式,这是正常的

这个错误对任何人都有意义吗

mysql\u num\u rows返回正确的结果计数,但一行之后,mysql\u fetch\u数组或mysql\u fetch\u assoc无法识别该资源的有效性,这有什么原因吗

如果您需要更多信息,请告诉我


我非常感谢在新代码中对pdo/mysqli/prepared语句的评论。

。它们不再得到维护,而是在使用。看到红色的盒子了吗?学习准备好的语句,然后使用or。你也应该发布你的代码。这不是MySQL或你的查询的问题。您在PHP中处理查询的方式有问题,但由于您没有发布任何PHP代码,因此没有其他事情可做。如果有人再次访问此网站,我将不胜感激,因为我发布了我的PHP代码。迈克·W。?我如何在PHP中处理我的查询?颠簸。。。我的批评者都去哪了?!?布勒?