【问题标题】:MYSQL PDO return type strange conversionMYSQL PDO 返回类型奇怪的转换
【发布时间】:2011-04-08 15:26:18
【问题描述】:

我在MYSQL中有如下表定义

CREATE TABLE IF NOT EXISTS `test_cases` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `exercise_id` int(10) unsigned NOT NULL,
  `author_id` int(10) unsigned NOT NULL,
  `input_1_value` varchar(255) default NULL,
  `input_2_value` varchar(255) default NULL,
  `input_3_value` varchar(255) default NULL,
  `input_4_value` varchar(255) default NULL,
  `input_5_value` varchar(255) default NULL,
  `output_value` varchar(255) default NULL,
  PRIMARY KEY  (`id`),
  KEY `test_cases_ibfk_1` (`exercise_id`),
  KEY `author_id` (`author_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3218 ;

我在这个表中有以下条目

INSERT INTO `test_cases` (`id`, `exercise_id`, `author_id`, `input_1_value`, `input_2_value`, `input_3_value`, `input_4_value`, `input_5_value`, `output_value`) VALUES
(560, 145, 496, '0', NULL, NULL, NULL, NULL, '0')

我有以下查询从表中获取上面的行

SELECT id, exercise_id, author_id, input_1_value, input_2_value, input_3_value, input_4_value, input_5_value, output_value FROM test_cases WHERE exercise_id=145

我对@9​​87654325@ 中的值感兴趣,但遇到了问题。在 phpMyAdmin 中运行查询将返回值“0”,这与预期的一样。然而,运行以下 php 脚本将返回值作为“真”,这完全是左字段,让我和我的项目主管很难过。 php脚本如下...

$db = DBCxn::getCxn();      
$sql = "SELECT id, exercise_id, author_id, input_1_value, input_2_value, input_3_value, input_4_value, input_5_value, output_value FROM test_cases WHERE exercise_id=:exid";
$st=$db->prepare($sql);
$st->bindParam(":exid", $exerciseId, PDO::PARAM_INT); // $exerciseID == 145
$st->execute();

$row = $st->fetch(); // default fetch mode is PDO::FETCH_BOTH

echo $row['input_1_value'];

这与“真实”相呼应!!!!为什么???为什么不打印'0'???

使用 print_r($row); 获取更多信息,我得到以下输出

Array ( [id] => 560 [0] => 560 [exercise_id] => 145 [1] => 145 [author_id] => 496 [2] => 496 [input_1_value] => true [3] => true [input_2_value] => [4] => [input_3_value] => [5] => [input_4_value] => [6] => [input_5_value] => [7] => [output_value] => true [8] => true ) 

注意output_value 在应该为 '0' 时也会返回为 'true'。

有人知道这里发生了什么吗?任何帮助表示赞赏。非常感谢。

【问题讨论】:

  • 这是我今天看到的最奇怪的事情。
  • 我用$db = new PDO('dblib:host=your_hostname;dbname=your_db;charset=UTF-8', $user, $pass); 对其进行了测试,我得到了 0,你使用的是什么字符集?

标签: php mysql pdo type-conversion


【解决方案1】:

尝试将常量 PDO::ATTR_STRINGIFY_FETCHES 设置为 true。
看看http://php.net/manual/en/pdo.setattribute.php,看看有没有帮助。

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 2015-06-14
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2014-10-23
    • 2011-10-07
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多