所以我使用 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
上还有其他方法:
但是您必须进行一些实验才能了解它们到底返回什么,因为文档有点薄。
您应该能够从 row
或 st
中获取列名称:
但是,您必须再次尝试才能找出 API。抱歉,我没有设置任何内容来使用您正在使用的 MySQL API,因此我无法提供更具体的信息。
关于mysql - 如何让 Ruby MySQL 返回 PHP 像 DB SELECT 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7896478/