Поэтому я использую 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 и могу получить данные из БД. Однако я не могу получить имена полей. Я мог бы, вероятно, извлечь его из приведенного оператора 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?
Я копался во всех методах, которые могу найти, но безуспешно. Надеюсь, вы, ребята, можете помочь.
Спасибо
Гейб