MySQL PDO查询的奇怪行为

时间:2014-10-28 19:52:46

标签: php mysql pdo

我有一个非常奇怪的问题,我无法找到解决方案。 ($ DB id PDO对象)

$type = 'some_type';      
$sql = "SELECT * FROM `last_save` WHERE `type` = :type;";
$st = $DB->prepare($sql);      
$st->bindParam(':type', $type, PDO::PARAM_STR);
$st->execute();
$rows = $st->fetchAll();
var_dump($rows);

$ rows是空数组

array(0) { }

尽管数据库中存在查询应该获取的行。

我的表结构是这样的:

CREATE TABLE IF NOT EXISTS `last_save` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` text,
  `parameter` int(11) DEFAULT NULL,
  `value` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

我在这里真的没有想法,任何帮助都会受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

您的代码看起来很干净,请检查您的pdo连接参数。如果您在表格中存储特殊字符,请在配置中添加“SET NAMES utf8”,例如:

$DB =  new PDO('mysql:host=localhost;dbname=my_db', 'user', 'pass', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

答案 1 :(得分:-1)

如果没有进一步测试,我认为您不必将引号和分号放在select语句中。 试试吧:

SELECT * FROM last_save WHERE type = :type