[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Из Mysql в Postgresql
Natair
Есть код написанный для Mysql, тербуеться его переделать под Postgresql. Как ни пробовал, но код работает в Mysql и не работает в Postgresql.

<?php
require_once('dbdata.php');

try {
//читаем параметры
$curPage = $_POST['page'];
$rowsPerPage = $_POST['rows'];
$sortingField = $_POST['sidx'];
$sortingOrder = $_POST['sord'];

//подключаемся к базе
$dbh = new PDO('mysql:host='.$dbHost.';dbname='.$dbName, $dbUser, $dbPass);
//указываем, мы хотим использовать utf8
$dbh->exec('SET CHARACTER SET utf8');

//определяем количество записей в таблице
$rows = $dbh->query('SELECT COUNT(id) AS count FROM users');
$totalRows = $rows->fetch(PDO::FETCH_ASSOC);

$firstRowIndex = $curPage * $rowsPerPage - $rowsPerPage;
//получаем список пользователей из базы
$res = $dbh->query('SELECT * FROM users ORDER BY '.$sortingField.' '.$sortingOrder.' LIMIT '.$firstRowIndex.', '.$rowsPerPage);

//сохраняем номер текущей страницы, общее количество страниц и общее количество записей
$response->page = $curPage;
$response->total = ceil($totalRows['count'] / $rowsPerPage);
$response->records = $totalRows['count'];

$i=0;
while($row = $res->fetch(PDO::FETCH_ASSOC)) {
$response->rows[$i]['id']=$row['id'];
$response->rows[$i]['cell']=array($row['id'], $row['surname'], $row['fname'], $row['lname']);
$i++;
}
echo json_encode($response);
}
catch (PDOException $e) {
echo 'Database error: '.$e->getMessage();
}

// end of getdata.php




Спустя 15 минут, 50 секунд (4.07.2012 - 08:59) sergeiss написал(а):
Кроме меня и еще пары человек, по Постгре тебе не подскажут тут :)

Вобщем, давай по порядку. Где-то должна выдаваться ошибка. Где именно? Если подключение успешно, то я думаю, что вот здесь
$dbh->exec('SET CHARACTER SET utf8');

потому что в Постгре нету такой команды!!!

Да и вообще у тебя не видно, где ты именно к Постгре подключаешься. К Мускулю - видно. А к Постгре - не видно.

PS. Используй специальные тэги при вводе кода в сообщение, тогда он подсвечивается и лучше читается. Для этого есть кнопки справа над окном ввода сообщения. PHP, SQL и другие.

Спустя 1 минута, 52 секунды (4.07.2012 - 09:00) Natair написал(а):
Так я и не могу сообразить как этот код изменить под Постгри. Пробовал команды переписать, так на странице ничего не отбражаеться. А когда использую Майскл все работает замечательно.

Спустя 1 минута, 26 секунд (4.07.2012 - 09:02) sergeiss написал(а):
ОК. Начни с подключения тогда. Какие задаешь параметры подключения, подключаешься ли? И как это проверяешь?
Сделай контрольные выводы состояний.

Спустя 2 минуты, 25 секунд (4.07.2012 - 09:04) Natair написал(а):
Я новичек в этой теме, но в общем подключение сделал так:
$dbh = new PDO('pgsql:dbname=relayprot; port=5432; host=astra; username=andrey; password=andrey');

Спустя 5 минут, 13 секунд (4.07.2012 - 09:10) sergeiss написал(а):
Давай определимся с терминами smile.gif "Сделал подключение" - это подключился. А ты пока только "задал параметры подключения" и не понятно, подключился ли. Вот я и спрашиваю - ты подключился? И как это проверил?

Спустя 2 минуты, 13 секунд (4.07.2012 - 09:12) Natair написал(а):
Хм, а как это проверить? Понимаю, что групый вопрос, но все же smile.gif

Спустя 7 минут, 6 секунд (4.07.2012 - 09:19) sergeiss написал(а):
Ты пользуешься неким классом. С которым я лично не работал никогда. Ищи в свойствах/методах класса. Как вариант, проверь, что ты получаешь после вызова
$dbh = new PDO('pgsql:dbname=relayprot; port=5432; host=astra; username=andrey; password=andrey');

Либо объект, либо false - но это мои предположения, я не знаю, что должно быть. Я с Постгре "напрямую" работаю. pg_connect() - и поехали.

Спустя 3 минуты, 27 секунд (4.07.2012 - 09:22) Natair написал(а):
Мне нужно было создать редактируемую таблицу и отправлять данные таблицы на сервер.
Нашел информацию здесь: http://www.simplecoding.org/jqgrid-redakti...redaktorov.html
Сам с таким не работал, да и интересно оно выглядет при использовании Mysql. Вот и хочеться все это сделать под Postgresql, на котором у меня все и работает.

Спустя 30 минут, 33 секунды (4.07.2012 - 09:53) Natair написал(а):
Не обязательно использовать именно этот вариант. В целом требуется сделать возможность редактирования таблицы.
Нашел еще такой вариант:
$(function() {
$('td').click(function(e) {
//ловим элемент, по которому кликнули
var t = e.target || e.srcElement;
//получаем название тега
var elm_name = t.tagName.toLowerCase();
//если это инпут - ничего не делаем
if(elm_name == 'input') {return false;}
var val = $(this).html();
var code = '<input type="text" id="edit" value="'+val+'" />';
$(this).empty().append(code);
$('#edit').focus();
$('#edit').blur(function() {
var val = $(this).val();
$(this).parent().empty().html(val);
});
});
});

$(window).keydown(function(event){
//ловим событие нажатия клавиши
if(event.keyCode == 13) { //если это Enter
$('#edit').blur(); //снимаем фокус с поля ввода
}
});


Но ни как не могу сообразить, что надо написать, чтобы данные отправлялись на сервер.

Спустя 3 минуты, 5 секунд (4.07.2012 - 09:56) sergeiss написал(а):
Natair - так я и не понял. У тебя что с подключением к БД Постгре? Проходит оно или нет?

Кстати, для работы с ПДО, согласно хэлпу, надо подключать библиотеки для каждого типа БД. Например,

extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll


Так что проверь для начала свой php.ini и наличие самих библиотек в нужном каталоге, где все библиотеки лежат.

Как я понял, пока надо разобраться с тем, что есть подключение к БД или его нет.

Спустя 5 минут, 26 секунд (4.07.2012 - 10:01) Natair написал(а):
А если рассмотреть то, что я добавил недавно и не заморачиватся с PDO?

Спустя 16 минут, 47 секунд (4.07.2012 - 10:18) sergeiss написал(а):
Цитата (Natair @ 4.07.2012 - 11:01)
А если рассмотреть то, что я добавил недавно и не заморачиватся с PDO?

Ты там добавил что-то из JQuery (с которым я также не работал). Но только это клиентская часть! А на сервере все равно что-то надо делать с данными. Так что можно и не с ПДО заморачиваться, а с "прямой" работой с БД. Но с ней, т.е. с БД, все равно работать придется на сервере.

Спустя 7 минут, 37 секунд (4.07.2012 - 10:26) Natair написал(а):
Вот и я не работал. Может подскажите примеры редактируемых таблиц? (желательно написанных под Postgresql)

Спустя 48 минут, 53 секунды (4.07.2012 - 11:15) sergeiss написал(а):
Так я не понял до конца суть проблемы. Речь идет о редакторе таблиц, работающем в браузере? Если да, то при чем тут тип базы данных? Основные заморочки будут на клиентской стороне и не зависят от типа БД.
Ты как-нибудь разбей задачу на части сначала, что ли. Где проблемы на сервере, где проблемы с клиентом. А то такое ощущение, что ты сам не представляешь до конца, что же хочешь - кроме некоего смутного ощущения.

Спустя 4 минуты, 56 секунд (4.07.2012 - 11:20) Natair написал(а):
Хочу сделать редактор таблицы, для удобства заноса информации на сервер. Но ни как не могу сообразить как это надо сделать?
Смог сделать построчный ввод в таблицу, но когда записей много то это очень долго. Вот поэтому и хочется вводить данные прямо в таблицу и отправлять все вместе.

Спустя 1 день, 11 минут, 36 секунд (5.07.2012 - 11:31) Natair написал(а):
Ошибку нашел и все исправил, осталось только одно. LIMIT в mysql и postgresql работает по разному, а хотелось бы чтобы это работало и в postgresql подскажите что надо сделать.

<?php
require_once('dbdata.php');

try {
//читаем параметры
$curPage = $_POST['page'];
$rowsPerPage = $_POST['rows'];
$sortingField = $_POST['sidx'];
$sortingOrder = $_POST['sord'];

//подключаемся к базе
$dbh = new PDO('pgsql:host='.$dbHost.';dbname='.$dbName, $dbUser, $dbPass);


//определяем количество записей в таблице
$rows = $dbh->query('SELECT COUNT(id) AS count FROM users');
$totalRows = $rows->fetch(PDO::FETCH_ASSOC);

$firstRowIndex = $curPage * $rowsPerPage - $rowsPerPage;
//получаем список пользователей из базы
$res = $dbh->query('SELECT * FROM users ORDER BY '.$sortingField.' '.$sortingOrder);

//сохраняем номер текущей страницы, общее количество страниц и общее количество записей
$response->page = $curPage;
$response->total = ceil($totalRows['count'] / $rowsPerPage);
$response->records = $totalRows['count'];

$i=0;
while($row = $res->fetch(PDO::FETCH_ASSOC)) {
$response->rows[$i]['id']=$row['id'];
$response->rows[$i]['cell']=array($row['id'], $row['surname'], $row['fname'], $row['lname']);
$i++;
}
echo json_encode($response);
}
catch (PDOException $e) {
echo 'Database error: '.$e->getMessage();
}

// end of getdata.php

Спустя 1 час, 47 минут, 33 секунды (5.07.2012 - 13:19) sergeiss написал(а):
А где у тебя вообще тут ЛИМИТ? Пока запрос, как он в Мускуле был. И не надо, плз, весь скрипт показывать! smile.gif Если говорим о запросе, то только его и показывай. И не забывай использовать тэги оформления кодов! Это кноки справа над полем ввода сообщений. А то я уже замучался за тобой их вводить...

PS. И напиши, в чем была ошибка. А то мало ли, кто сюда зайдет с подобной проблемой. Глядишь, твой ответ ему и поможет.

Спустя 20 часов, 14 минут, 35 секунд (6.07.2012 - 09:33) Natair написал(а):
Изначально было так:
$res = $dbh->query('SELECT * FROM users ORDER BY '.$sortingField.' '.$sortingOrder.' LIMIT '.$firstRowIndex.', '.$rowsPerPage);

Я переделал вот так и все заработало:
$res = $dbh->query('SELECT * FROM users ORDER BY '.$sortingField.' '.$sortingOrder);

Вот теперь хотелось бы узнать есть ли аналог LIMIT в Postgresql

Спустя 52 минуты, 56 секунд (6.07.2012 - 10:26) Michael написал(а):
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.