使用idiorm从特殊字符串开始从mysql获取数据

时间:2016-05-07 21:54:59

标签: php mysql idiorm

我试图通过使用idiorm从mysql数据库中获取最后30个条目。一个单元格只包含“/ question”或“/ info”,并且在我的php页面中不会显示这些行。我只是回应条目。在phpmyadmin中存储它们,但是idiorm拒绝查询它们。

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:0)

虽然似乎有用。我创建了一些数据来匹配您的查询:

create table users (
  id int not null auto_increment,
  username varchar(255),
  primary key(id)
);
insert into users set username = 'john';
insert into users set username = 'mike';

create table messages (
  id int not null auto_increment,
  user_id int,
  message varchar(255),
  time int,
  primary key(id),
  key(time)
);
insert into messages set user_id = 1, message = 'hello world', time = 10;
insert into messages set user_id = 2, message = '/question', time = 20;

然后,在PHP中:

$messages = ORM::for_table('messages')
          ->join('users', array('users.id', '=', 'messages.user_id'))
          ->select('username')
          ->select('time')
          ->select('message')
          ->order_by_asc('time')
          ->limit(30)
          ->find_many();

foreach ($messages as $m) {
  print "[$m->username] [$m->time] [$m->message]\n";
}

产生了预期的输出:

[john] [10] [hello world]
[mike] [20] [/question]

也许有与/字符无关的原因。也许message中的记录具有错误的外键(错误user_id值)。

调试此方法的一种方法是设置

ORM::configure('logging', true);

允许您查看最后执行的数据库查询:

var_dump(ORM::get_last_query());

在我们的案例中,打印:

SELECT `username`, `time`, `message` FROM `messages` JOIN `users` ON `users`.`id` = `messages`.`user_id` ORDER BY `time` ASC LIMIT 30