mysql - 如何让 Ruby MySQL 返回 PHP 像 DB SELECT 结果

标签 mysql ruby prepared-statement

所以我使用 PDO 进行数据库连接,如下所示:

$this->dsn[$key] = array('mysql:host=' . $creds['SRVR'] . ';dbname=' . $db, $creds['USER'], $creds['PWD']);
$this->db[$key] = new PDO($this->dsn[$key]);

使用 PDO,我可以使用如下方式执行 MySQL SELECT:

$sql = "SELECT * FROM table WHERE id = ?";
$st = $db->prepare($sql);
$st->execute($id);
$result = $st->fetchAll();

然后,$result 变量将返回一个数组数组,其中每一行都给出一个增量键 - 第一行的数组键为 0。然后该数据将具有一个数据库数据数组,如下所示:

$result (array(2)
  [0]=>[0=>1, "id"=>1, 1=>"stuff", "field1"=>"stuff", 2=>"more stuff", "field2"=>"more stuff" ...],
  [1]=>[0=>2, "id"=>2, 1=>"yet more stuff", "field1"=>"yet more stuff", 2=>"even more stuff", "field2"=>"even more stuff"]);

在此示例中,数据库表的字段名称为 id、field1 和 field2。结果允许您旋转数据行数组,然后使用索引(0、1、2)或字段名称(“id”、“field1”、“field2”)访问数据。大多数时候,我更喜欢通过字段名称访问数据,但这两种方式访问​​都很有用。

所以我现在正在学习 ruby​​-mysql gem,我可以从数据库中检索数据。但是,我无法获取字段名称。我可能可以从给定的 SQL 语句中提取它,但这需要相当多的编码来捕获错误,并且只有在我不使用 SELECT * FROM ... 作为我的 SELECT 语句时才有效。

因此,我使用一个充满州名称及其缩写的表格来进行测试。当我使用“SELECT State, Abbr FROM states”和以下代码时

st = @db.prepare(sql)
if empty(where)
  st.execute()
else
  st.execute(where)
end

rows = []
while row = st.fetch do
  rows << row
end
st.close

return rows

我得到这样的结果:

[["Alabama", "AL"], ["Alaska", "AK"], ...]

我想要这样的结果:

[[0=>"Alabama", "State"=>"Alabama", 1=>"AL", "Abbr"=>"AL"], ...]

我猜我没有办法检查可以正确显示它,但我希望你现在明白了。

无论如何都要这样做吗?我已经看到一些关于执行此类操作的引用,但它似乎需要 DBI 模块。我想这不是世界末日,但这是唯一的方法吗?或者我可以单独使用 ruby​​-mysql 来完成吗?

我已经研究了所有我能找到的方法,但没有成功。希望大家能够帮忙。

谢谢 加布

最佳答案

您可以自己完成此操作,无需太多努力:

expanded_rows = rows.map do |r|
    { 0 => r[0], 'State' => r[0], 1 => r[1], 'Abbr' => r[1] }
end

或者可以将其封装在方法中的更通用的方法:

columns = ['State', 'Abbr']
expanded_rows = rows.map do |r|
    0.upto(names.length - 1).each_with_object({}) do |i, h|
        h[names[i]] = h[i] = r[i]
    end
end

因此,您可以像现在一样收集,然后通过类似于上面的内容泵送该数组数组,您应该获得您正在寻找的数据结构类型侧面。

st.fetch 获取的 row 上还有其他方法:

http://rubydoc.info/gems/mysql/2.8.1/Mysql/Result

但是您必须进行一些实验才能了解它们到底返回什么,因为文档有点薄。

您应该能够从 rowst 中获取列名称:

http://rubydoc.info/gems/mysql/2.8.1/Mysql/Stmt

但是,您必须再次尝试才能找出 API。抱歉,我没有设置任何内容来使用您正在使用的 MySQL API,因此我无法提供更具体的信息。

关于mysql - 如何让 Ruby MySQL 返回 PHP 像 DB SELECT 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7896478/

相关文章:

php - 使用 PDO 变量将 $_POST 值传递到函数参数中

mysql - 连接查询和分组以显示结果

mysql根据类型分组查询

mysql - rake 测试 :prepare doesn't create test database

ruby-on-rails - 从 Mysql::Object 中的 ruby​​ on rails 中提取数据

MySQL : named parameters with PREPARE command?

mysql - Sails-mysql 拒绝注册连接

php - 我需要从 mysql_query 转换为 PDO 的帮助

php - 使用准备好的语句检查用户覆盖凭据、用户覆盖权限以及删除 MySQL 表记录

ruby-on-rails - Gitlab 不会在替代端口上创建 Postgres 实例