$ mysqli-> fetch_array();返回奇怪的结果

时间:2014-01-23 07:24:44

标签: php mysql mysqli

我遇到了一个我从未见过的非常奇怪的情况。使用MySQLi的PHP中的简单SQL查询在我获取数组时没有返回正确的列名。

我已经看过php.net了,这里有一个解决方案,但到目前为止我所看到的只是PHP和MySQL的版本必须是>这两者都是。

这是Eclipse的屏幕截图,显示SQL结果被放入$ row,列名不正确。 edi_packets_to_send是表而不是列名。

SELECT `id`,`times`, `send`, `no_of_attemps` from `edi_packets_to_send` WHERE `send` = 't' and `network_id`= 8012

enter image description here

表转储:

DROP TABLE IF EXISTS `edi_packets_to_send`;
CREATE TABLE `edi_packets_to_send` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `packet` char(83) DEFAULT NULL,
  `priority` int(11) DEFAULT NULL,
  `send` varchar(5) NOT NULL DEFAULT 'false',
  `seq` char(2) DEFAULT NULL,
  `network_id` int(11) DEFAULT NULL,
  `times` datetime DEFAULT NULL,
  `termostat_location` char(4) DEFAULT NULL,
  `packet_type` char(2) DEFAULT NULL,
  `no_of_attemps` int(11) DEFAULT NULL,
   `network_network_id` int(11) DEFAULT NULL,
  `cms_room_id` int(11) DEFAULT NULL,
  `action_code` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`) USING BTREE,
  KEY `network_id` (`network_id`) USING BTREE,
  KEY `network_network_id` (`network_network_id`) USING BTREE,
  KEY `room_id` (`cms_room_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=utf8;

INSERT INTO `edi_packets_to_send` VALUES ('17', '02 07 00 01 ff 1f ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff', '111', 't', '', '8012', '2014-01-22 13:22:36', '0007', '1f', '1', '0', '37', '111');
INSERT INTO `edi_packets_to_send` VALUES ('18', '02 07 00 01 ff 32 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff', '112', 't', '', '8012', '2014-01-22 13:08:27', '0007', '32', '1', '0', '37', '18');
INSERT INTO `edi_packets_to_send` VALUES ('19', '02 07 00 01 ff 1e ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff', '113', 't', '', '8012', '2014-01-22 13:02:28', '0007', '1e', '1', '0', '37', '5');

PHP测试代码:

<pre>
<?php
ini_set('display_errors', 'On');
ini_set('log_errors', 'On');

define('DB1_HOSTNAME',      'localhost');
define('DB1_USERNAME',      'xxxx');
define('DB1_PASSWORD',      'xxxx');
define('DB1_DATABASE',      'xxxx');
define('DB1_PORT',          '3306');
define('DB1_DATABASE_DEBUG', true); 

try{
$sql_debug = '';

$idhotelu = "8012";

$mysqli = mysqli_connect(DB1_HOSTNAME, DB1_USERNAME, DB1_PASSWORD, DB1_DATABASE);
if (mysqli_connect_errno($mysqli)) {throw new exception("Failed to connect to MySQL: " . mysqli_connect_error());}

$sql = "SELECT `id`,`times`, `send`, `no_of_attemps` from `edi_packets_to_send` WHERE `send` = 't' and `network_id`=".$idhotelu;
$sql_debug[] = __file__." (Line ".__line__."): ". $sql; 
if(!$result = $mysqli->query($sql)){throw new Exception("SQL Failed ".__file__." on line ".__line__.":\n".$sql);}

$row = $result->fetch_array(MYSQLI_ASSOC);

print_r($row);



}catch(Exception $e){   
$sql_debug[] = "**Fatal: ".$e->getMessage();
if (DB1_DATABASE_DEBUG){ print_r($sql_debug);}
die();
}

这是否发生在其他人身上?


我确实发现我的Eclipse PHP版本有些陈旧,这可能是问题吗?如果是这样,我如何在eclipse上更新我的PHP版本?

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:0)

原来,这是在eclipse上运行的旧PHP版本。 我升级到更高版本的PHP ,结果按预期返回!

enter image description here