kører du php på windows eller linux ? hvis windows, så skal du have en php_pgsql.dll fil lagt over under system32 hvis linux, skal php compileres med support for postgresql
Jep jeg havde downloaded win-installer, men har nu hentet og fundet den under extentions php_pgsql.dll, den er nu lagt under windows/system32, men stadig kommer samme fejl
jeps, det havde jeg lige glemt, du skal også i php.ini filen udkommentere en linje der angiver at php skal loade pgsql.dll filen når serveren starter.... prøv at søge på pgsql i ini filen, så tror jeg du finder det.....
jeg har startet php.exe i c:/php, lagt php_pgsql.dll under system32, har fjernet ;extension=php_pgsql.dll i php.ini, men der kommer samme fejl. Hvad er der galt og har du et eksempel på en smart php klasse til sqlforbindelsen. er på i morgen tidlig igen
function closedb($dbconn){ if(!pg_close($this->dbconn)){ echo "Kunne ikke lukke forbindelsen til PostGre!"; return false; }else{ return true; } }
function sql_execute($query) { $resultat = pg_exec($this->dbconn, $query);
if(!$resultat) { echo "Kunne ikke udføre: <em>$query</em>"; } }
function sql_execute_receive($query) { $resultat = pg_exec($this->dbconn, $query);
if(!$resultat) { echo "Kunne ikke udføre: <em>$query</em>"; return; }
return $resultat; }
function sql_execute_scalar($query) //returnerer kun et felt { $resultat = pg_exec($this->dbconn, $query); if($resultat){ $row = pg_fetch_array($resultat); return $row[0]; } }
}
?>
-------------sådan instatierer du en ny connection-------------------- #åbn for databasen $mydbclass = new dbclass(); $connection = $mydbclass->opendb();
-----------sådan lukker du for en forbindelsen------------------
#luk for databasen $mydbclass->closedb($connection);
-----------sådan benytter du din forbindelse inde fra en function--------------
function getFirstVisitor(){ global $connection; global $mydbclass; $sql = "select first_visitor()"; $data = $mydbclass->sql_execute_scalar($sql); return $data; //return $sql; }
--------------sådan benytter du den på en vilkårlig php side------------------
$query = "select feltnavn1, feltnavn2 from \"arrangementer\" where id='$id'"; $myarray = $mydbclass->sql_execute_receive($query);
if(pg_numrows($myarray) > 0){
//udpak data for ($k = 0; $k < pg_numrows($myarray); $k++ ){
$post = pg_fetch_array($myarray, $k); $feltnavn1 = $post["feltnavn1"]; $feltnavn2 = $post["feltnavn2"]; ....... ....... } }else{ echo "Der er ingen data!!!!!"; }
Lige et spørgsmål, hvis jeg nu vil kontakte en anden pc med database på eks ip 192.168.1.203 port 5432, får jeg den fejl at den ikke kan forbinde, hvad skal jeg gøre for at min php kan forbinde med db på anden pc
hvordan laver man en tabel fra php har brugt flg. kode $tabelSQL = "CREATE TABLE users ( id int, navn varchar(50), email varchar(50), password varchar(50), primary key (id));" pg_Query($tabelSQL); men den melder fejl i pg_Query($tabelSQL);
En lille bemærkning til din email felt, en email kan jo nemt være over 50 tegn, hvis jeg var dig ville jeg skrive 255 i stedet for, længere kan en email ikke være....
Det er højst sandsynligt fordi du ikke har pakket din recordset ud endnu, hvis du da får mere end et resultat tilbage. Du kan evt prøve at lave et select statement, hvor du ved der kun kommer en værdi tilbage og så benytte denne funktion :
function sql_execute_scalar($query) //returnerer kun et felt { $resultat = pg_exec($this->dbconn, $query); if($resultat){ $row = pg_fetch_array($resultat); return $row[0]; } }
Hvis du så bare udskriver hvad funktionen returner med et echo, burde du ikke få "Resource id #2"
Du kan bare det der, men når man indsætter en record i en tabel og gerne vil have den sidste record man har oprettet (dennes attribut customerID), hvordan gør man så. Det skal siges at der kan være flere bruger på samme tid, så det vil være noget skidt hvis man får fat i en af deres records. Har brug pg_last_oid, men den returnere kun et positivt tal for at der er oprettet en. Har også brugt select * from customer order by "customerId" desc limit 1;, men den tager kun den sidste der er i tabellen (uden at se hvem der har oprettet den)
Ja, det er lidt tricky at få den sidst oprettede id, denne funktion er ikke helt foolproof....
function getLastInsertedID($result, $table_name, $column_name) { global $connection; global $mydbclass; $oid = pg_getlastoid($result); $query_for_id = "SELECT $column_name FROM $table_name WHERE oid=$oid"; $result_for_id = $mydbclass->sql_execute_receive($query_for_id); if(pg_numrows($result_for_id)){ $id=pg_fetch_array($result_for_id, 0, PGSQL_ASSOC); } return $id[$column_name]; }
Når du bruger den skal du have de variable "til stede" $connection + $mydbclass; Ellers vil funktionen ikke virke.
Hvis du skal være helt sikker på at du får den sidste id, skal du lave noget med locks på din tabel, men det er noget omstændelig og kan også give lange svartider, hvis der er mange der skal vente på at lock'en bliver fjernet igen.
Jeg bruger selv denne funktion som en del af et debatforum og den har endnu ikke fejlet...
Din sidste funktion virker. man skal bruge customerId som fremmednøgle i tabellen user, dvs der er nogle user der er tilknyttet customer, jeg har prøvet at gøre det på flg måde: 1. insert en customer 2. select id fra customer 3. insert en user med fremmednøglen id fra customer (denne udførsel sker mange gange) Jeg tænkte at der måske var en mere simpel måde at gøre det på
hov, så først nu din bemærkning: "Lige et spørgsmål, hvis jeg nu vil kontakte en anden pc med database på eks ip 192.168.1.203 port 5432, får jeg den fejl at den ikke kan forbinde, hvad skal jeg gøre for at min php kan forbinde med db på anden pc"
For at postgre skal give adgang fra en anden pc, skal der på den linux server som den kører på gives tilladelse. Det foregår ved man redigerer i filen pg_hba.conf, her skal der tilføjes en linje i bunden af filen:
host all all 192.168.1.203 255.255.255.255 trust
Så skal database enginen genstartes før ændringerne træder i kraft, det gøres nemmest ved at genstarte hele maskinen, hvis du kan det....
Nu har du hjulpet mig igen, mht. til pg_hba.conf, skrev jeg md5 i stedet for trust. Men til det andet, jeg har 2 tabeller customer og user, hvor primær nøgle i customer er fremmed nøgle i user, (for at man kan se hvilken customer user hører til). Derfor efter min løsning, skal man først oprette customer, når den er oprettet finder man dens customerid. Customerid bruger man når man opretter en user. Men jeg tænkte at der måske var en bedre løsning?, istedet for de 3 punkter, så man evt. kan gøre det i et hug
Du skulle nok godt kunne klare det med en stored procedure, også kaldet functions i postgresql, da en function bliver udført atomart, dvs uden at andre kald til databasen bliver udført mens functionen udføres. Du kan læse lidt om hvordan man evt kan gøre her: http://www.postgresql.org/docs/7.4/interactive/xfunc-sql.html
Igen virker det. Men i usertabel skal jeg have genereret et unik password til hver user som skal gemmes i usertabellen, kan man få postgresql til det og hvordan gør man det. Har ledt på internettet, men kan ikke finde noget konkret
Så er jeg tilbage, men har lidt problemer med at få lukket for database, min kode er: require_once ("dbclass.php"); require_once ("customer.php"); $db = new dbclass(); $connect = $db->opendb(); class dbCustomer{ function createCustomer(&$customer){ global $connect; //åbner database funktionindhold.... global $db->closedb($connect);} men den vil ikke køre den sidste linje får fejl T_Global, hvad sker der
det er fordi du ikke skal skrive "global $db->closedb($connect);}" men bare "$db->closedb($connect);}" global keywordet er beskrevet her : http://dk.php.net/language.variables.scope kort fortalt giver den dig adgang til dine variable (der er erklæret udenfor) inde i en function
Nå jeg har løst min select (tastefejl(har arbejdet lidt med java og aldrig php, det er nyt det hele)),jeg har et problem hvor jeg selecter en record fra databasen, men det skal returnere et objekt af customer (har lavet en customer klasse) koden er function selectOneCustomer($customer) //man sender et customer objekt til funktionen { global $connect; $rov="select * from \"customer\" where \"customerId\" ='$customer->id'"; $selectOne = pg_query($connect, $rov); if($selectOne){ while ($row = pg_fetch_row($selectOne)) $cc=new customer(); $cc->setPostNo($row[2]); //fejl hvordan skal man oprette et echo $cc->post; customerobjekt }else{ return "sur"; }} har prøvet dette men virker ikke.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.