THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => Προγραμματισμός (C, VB, Delphi, PHP, ASP...) => Topic started by: Mendoza on September 17, 2009, 17:43:32 pm



Title: php και Database access
Post by: Mendoza on September 17, 2009, 17:43:32 pm
Για όσους ασχολούνται..
Όπως είναι γνωστό η php για σύνδεση σε βάση mysql χρησιμοποεί την mysql_pconnect και εκτελεί ερωτήματα με την mysql_query.

Για σύνδεση με access από την άλλη χρησιμοποιεί την odbc_connect και την odbc_exec() αντίστοιχα.

Μου έχει ανατεθεί να κάνω δικές μου συναρτήσεις connect και execute αντίστοιχα που να εκτελούνται σε όλους τους μανατζαρέους βάσεων,access,mysql,oracle..όλες.

Για να μην χρειάζεται να αλλάξουμε τα scriptakia όταν μεταφέρουμε την βάση από τον έναν μάνατζερ στον άλλο..

Μήπως έχει κανείς ιδέα πώς θα γίνει αυτό??μήπως υπάρχει πουθενά και δεν το χω δεί?μήπως τελικά είναι πολύ δύσκολο,ειδάλλως θα είχε γίνει και θα είχα βρει κάτι ανάλογο?


Title: Re: php και Database access
Post by: SolidSNK on September 17, 2009, 18:00:28 pm
Μερικά πράγματα θα είναι κοινά, για SQL μιλάμε . Oι διαφορές βέβαια υπάρχουν, γι αυτό και οι πολλές functions.

Απ' όσο κατάλαβα θα το κάνεις αυτό σε php. Μπορείς να φτιάξεις μία wrapper function η οποία θα εκτελεί μέσα τον έλεγχο για να εξακριβώσει τι είδους database μιλάμε, θα κάνει άμα χρειαστεί μετατροπή του query ή ό,τι άλλο παίζει, και θα καλεί την αντίστοιχη function . Φυσικά θα πρέπει να δεις τα specifications της κάθε database για να βρεις ένα τρόπο να κάνεις την "εξακρίβωση". Γενικά, αυτό το πράγμα κάνει το PEAR (http://en.wikipedia.org/wiki/PEAR).

Αν το κάνεις τελείως μόνος , δλδ δε θα χρησιμοποιήσεις κάποια έτοιμη php συνάρτηση , τότε κατέβασε τον κώδικα της php και δες πως γίνονται define οι functions για να πάρεις μια ιδέα. Δες και το PEAR για να πάρεις ιδέες.


Title: Re: php και Database access
Post by: Mendoza on September 17, 2009, 18:36:14 pm
Ωραίο αυτό το Pear..βέβαια δεν βρήκα κάτι που να με εξυπηρετεί!

αυτό που λες στο τέλος θέλω να κάνω,να δώ έτοιμο τον κωδικό κάποιας connect αλλά δεν το βρίσκω στο google.


Title: Re: php και Database access
Post by: SolidSNK on September 17, 2009, 18:45:55 pm
PHP internals... απ' όσο βλέπω η mysql_connect είναι build in function. Θα είναι στο source code της php , γραμμένη σε C δλδ. Θα ψάξω κιόλας σε λίγο, γιατί είμαι περίεργος :P


Title: Re: php και Database access
Post by: SolidSNK on September 17, 2009, 18:58:02 pm
Εσύ θες δλδ να φτιάξεις ένα extension της php που να διαχειρίζεται διάφορες βάσεις ανεξαρτήτως τύπου?  :???:


Title: Re: php και Database access
Post by: Mendoza on September 17, 2009, 19:41:15 pm
ναι ακριβώς αυτό!μήπως είναι παράλογο?/ :P


Title: Re: php και Database access
Post by: alekos on September 17, 2009, 19:46:46 pm
ναι ακριβώς αυτό!μήπως είναι παράλογο?/ :P
το πρόβλημα είναι ότι κάθε βάση δεδομένων εκτός από κάποιο πρότυπο της SQL χρησιμοποιεί και δικές της εντολές, πχ στην postgresql δεν υπάρχει η εντολή autoincrement για κάποιο πεδίο αν θυμάμαι καλά. Οπότε με κάποιον τρόπο θα πρέπει εκτός από το σετ εντολών να αλλάζουν και τα queries πράγμα που μου φαίνεται παράλογο.


Title: Re: php και Database access
Post by: SolidSNK on September 17, 2009, 19:55:41 pm
ναι ακριβώς αυτό!μήπως είναι παράλογο?/ :P
Όχι δεν είναι παράλογο. Προτείνω το παρακάτω βιβλίο. Θα σε βοηθήσει να γράψεις extensions, να ορίσεις δικές σου built in functions κτλ : http://www.amazon.com/Extending-Embedding-PHP-Sara-Golemon/dp/067232704X  . Για την mysql_connect στο source code της php , θα τη βρεις στο $folder/ext/mysql ! Φυσικά δε θα 'ναι κάτι πολύ εύκολο, αφού θα μπλέξεις με C ...

ναι ακριβώς αυτό!μήπως είναι παράλογο?/ :P
το πρόβλημα είναι ότι κάθε βάση δεδομένων εκτός από κάποιο πρότυπο της SQL χρησιμοποιεί και δικές της εντολές, πχ στην postgresql δεν υπάρχει η εντολή autoincrement για κάποιο πεδίο αν θυμάμαι καλά. Οπότε με κάποιον τρόπο θα πρέπει εκτός από το σετ εντολών να αλλάζουν και τα queries πράγμα που μου φαίνεται παράλογο.
Αυτό μπορεί να κάνει η PEAR ;) Συγκεκριμένα
Quote
Database Abstraction

PHP offers extensions for all common and some exotic databases. Database abstraction plays the most important role when it comes to database-independent applications. But even when you do not plan to distribute your application for different database backends, abstraction makes sense. To get a better idea of that, let's take a look at some types of database abstractions.

Call abstraction. This kind of abstraction is highly recommended when your developers have to deal with different databases. Every PHP database extension provides a completely different API; for example, the Oracle 8 (OCI) extension uses oci_execute(). Call abstraction provides a common API for each of the database extensions.

Data type abstraction. A higher level of abstraction is the data type abstraction. Every database has its own data types and convention for them (for example, date and time fields). Abstracting those data types allows you to access and use the different kinds of data in a unique way.

SQL abstraction
. Whether you put SQL abstraction at a higher level or on the same level as the data type abstraction, it's a very nice feature when you migrate from one database to another. Every database supports some proprietary extensions to standard SQL. Although most of these extensions aim at similar problems with pure SQL, they use a different syntax. In other cases, a feature is implemented in one database, but not available in another. Both cases are covered by SQL abstraction, which offers a unique API to those features and emulates the functionality, if it's not available for the specific database.
Αυτό που θέλει να κάνει ο board ακριβώς...
http://www.devshed.com/c/a/PHP/Database-Abstraction-With-PHP/


Title: Re: php και Database access
Post by: Mendoza on September 18, 2009, 02:05:40 am
Πρώτος snake,ευχαριστώ!!


Title: Re: php και Database access
Post by: SolidSNK on September 18, 2009, 02:14:44 am
np ;)