Problemi di Database

Questa sezione contiene alcune delle domande più comuni a proposito della relazione fra PHP e i database. Sì, PHP virtualmente può accedere a qualsiasi database oggi disponibile.

Ho sentito che è possibile accedere al Server Microsoft SQL da PHP. Come?

Sulle macchine Unix puoi usare PDO_ODBC oppure Unified ODBC API.

Sulle macchine Windows puoi anche usare PDO_SQLSRV oppure SQLSRV.

Guarda anche la risposta alla prossima domanda.

Posso accedere ai database Microsoft Access?

Sì. Hai già tutti gli strumenti che ti servono se stai utilizzando Windows 9x/Me o NT/2000. Qui hai a disposizione i driver ODBC e ODBC di Microsoft per i database Microsoft Access.

Se stai utilizzando PHP su una Unix box e vuoi interagire con MS Access su una Windows box, avrai bisogno dei driver ODBC di Unix. » OpenLink Software ha dei driver ODBC basati su Unix che possono aiutarti in questo senso.

Un'altra alternativa è quella di usare un server SQL che ha i driver ODBC di Windows e utilizzare questo per memorizzare i dati, che puoi successivamente accedere da Microsoft Access (usando gli ODBC) e PHP (usando i driver inclusi), oppure puoi usare un formato di file intermedio che sia leggibile sia da Access che da PHP, come ad esempio flat files o database dBase. Su questo punto, Tim Hayes di OpenLink software scrive:

Usare un altro database come intermediario, non è una buona idea, quando puoi usare gli ODBC da PHP direttamente sul tuo database (ad esempio con i driver di OpenLink). Se hai bisogno di usare un formato di file intermedio, OpenLink ha appena rilasciato "Virtuoso" (un motore virtuale di database) per NT, Linux e altre piattaforme Unix. Per favore, visita il nostro » sito web per il download gratuito.

Una opzione che ha dimostrato di avere successo è quella di usare MySQL e i suoi driver MyODBC su Windows e sincronizzare i database. Steve Lawrence scrive:

  • Installa MySQL sulla tua piattaforma seguendo le istruzioni di MySQL. Le ultime disponibili su » http://www.mysql.com/ Non sono richieste speciali configurazioni, eccetto quando imposti il database, e configuri l' account dell' utente, dovresti mettere % nel campo host, oppure il nome host del computer Windows con cui vuoi accedere a MySQL. Prendi nota del nome del tuo server, della username e della password.
  • Scarica il driver MyODBC per Windows dal sito MySQL. Installalo sulla tua macchina Windows. Puoi eseguire il test di questa operazione con le utilities incluse in questo programma.
  • Crea una user oppure un dns di sistema nel tuo ODBC administrator, situato nel pannello di controllo. Crea un nome dns, inserisci il tuo hostname, username, password, porta, ecc. per il tuo database MySQL configurato al punto 1.
  • Installa Access con una installazione completa, in questo modo sarai sicuro di aver ottenuto i giusti add-ins... Perlomeno avrai bisogno del supporto ODBC e il gestore di tabelle collegato.
  • Adesso la parte divertente! Crea un nuovo database di accesso. Nella finestra della tabella, clicca col tasto destro e seleziona Link Tables, oppure sotto l' opzione file menu, seleziona Get External Data e poi Link Tables. Quando esce fuori il box del file browser, seleziona i file del tipo: ODBC. Seleziona i dns di Sistema e il nome del tuo dns creato allo step 3. Seleziona la tabella da collegare, seleziona OK e fatto! Adesso puoi aprire la tabella e aggiungere/cancellare/modificare i dati sul tuo server MySQL! Puoi anche costruire query, importare/esportare tabelle su MySQL, costruire form e report, ecc.

Trucchi e suggerimenti:

  • Puoi costruire le tue tabelle in Access ed esportarle su MySQL, poi ricollegarle in direzione opposta. Questo velocizza la creazione delle tabelle.
  • Quando crei le tabelle in Access, devi aver definito una chiave primaria per avere accesso in scrittura alla tabella in Access. Accertati di aver creato una chiave primaria in MySQL prima di effettuare i collegamenti ad Access.
  • Se cambi una tabella in MySQL, devi ri-collegarla ad Access. Vai a tools>add-ins>gestore delle tabelle collegate, incrocialo al tuo DSN ODBC, e seleziona la tabella da ri-collegare da questo punto. Puoi anche spostare il sorgente del tuo dns, seleziona giusto il checkbox "always prompt for new location", prima di cliccare su OK.

Perchè si scoraggia l' utilizzo dell' estensione MySQL (ext/mysql) che ho usato per più di 10 anni? E' stata deprecata? Cosa posso usare al suo posto? Come faccio a migrare?

Ci sono tre estensioni MySQL, come descritto nella sezione Scegliere una API MySQL. Non bisognerebbe usare la API vecchia, è stata deprecata a partire da PHP 5.5.0 ed è stata spostata su PECL a partire da PHP 7.0.0. Ti incoraggiamo fortemente a scrivere il tuo nuovo codice o con mysqli oppure con PDO_MySQL.

In questo momento gli script di migrazione non sono ancora disponibili, nonostante la API di mysqli contenga allo stesso tempo una API procedurale e una API OPP. La versione procedurale è simile alla ext/mysql.

Non è possibile mixare le estensioni. Quindi, ad esempio, passare una connessione mysqli a PDO_MySQL o ad ext/mysql non funziona.

Perchè ottengo un errore che suona più o meno così: "Warning: 0 is not a MySQL result index in <file> on line <x>" oppure "Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>"?

Stai cercando di usare un identificatore di risultato che è 0. Lo 0 indica che la tua richiesta è fallita per qualche motivo. Devi controllare gli errori dopo aver inviato la tua richiesta e prima del tentativo di usare le informazioni restituite dall'identificatore di risultato. Il modo corretto di farlo è con codice simile al seguente:

<?php

$result 
mysql_query("SELECT * FROM tables_priv");
if (!
$result) {
    echo 
mysql_error();
    exit;
}
?>
or
<?php

$result 
mysql_query("SELECT * FROM tables_priv")
    or die(
"Bad query: " mysql_error());
?>

add a note add a note

User Contributed Notes 5 notes

up
12
knb at gfz-potsdam dot de
12 years ago
This is a crucial piece of information for SYBASE users:

If you are using the free, but old, 11.x client libs from sybase,
then compile with option  "--with-sybase-ct=$SYBASE"
substitute $SYBASE with the appropriate directory name.

option --with-sybase (without ct) can somehow be used to talk to old MS-SQL servers, but only with the 11.x client libs.

If you are using free, or have legally obtained, 12.x client libs from sybase, then compile with option  "--with-sybase-ct=$SYBASE/$SYBASE_OCS"
substitute $SYBASE/$SYBASE_OCS with the appropriate directory name.
up
2
plandis98 at yahoo dot com
11 years ago
If one is using PHP on Windows to connection to MS SQL Server and does not want to pass credentials via the mssql_connect but instead use MS Connectionless NT Authentication, what is the proper syntax/usage? 

I believe you want to turn on secure_connection in php.ini file:
; Use NT authentication when connecting to the server
mssql.secure_connection = On
up
-3
djlopez at gmx dot de
11 years ago
How to compile PHP5 when you have installed mysql, but
- you can't find the "mysql header files" or
- get this error: Cannot find MySQL header files under /usr/

If you want to use mysql 4.0 (*not* 4.1 or even higher!) just download & extract the latest mysql4.0 binary distribution to e.g.
/root/mysql40/

but don't start it (it even should not work, if you have a mysql server already running)

Then use --with-mysql=/root/mysql4 within your php5 configuration.

After compiling/installing (make, make install), you may delete the /root/mysql40/ directory, or keep it for later versions of php5.
up
-4
Anonymous
12 years ago
Just a quick note which may help Windows users setting up PHP/Apache/MySQL.  I was receiving these two error messages on Apache startup: 1) "The procedure entry point mysql_thread_end could not be located in the dynamic link library LIBMYSQL.dll" and 2) "PHP Startup: Unable to load dynamic library '<my php installation dir>/ext/php_mysql.dll' - The specified procedure could not be found".  After checking that libmysql.dll did exist in my root PHP install dir, and that this dir was in my path, I determined that the problem was an older version of libmysql.dll.  My solution was to search all harddrives for this file (I found 6 copies of 5 different versions), and rename all of them except my PHP install dir copy.  PHP, Apache and MySQL all function as expected after making this change.
up
-11
ashay dot chaudhary at microsoft dot com
6 years ago
Q: I heard it's possible to access Microsoft SQL Server from PHP. How?

"On Windows machines, you can simply use the included ODBC support and the correct ODBC driver."
There is a better solution now, download the SQL Server Driver for PHP from Microsoft's Download Center, it is officially supported by Microsoft.

Source code: sqlsrvphp.codeplex.com
To Top