<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/faq.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'faq.databases.php',
    1 => 'Problemi di Database',
    2 => 'Problemi di Database',
  ),
  'up' => 
  array (
    0 => 'faq.php',
    1 => 'FAQ',
  ),
  'prev' => 
  array (
    0 => 'faq.obtaining.php',
    1 => 'Ottenere PHP',
  ),
  'next' => 
  array (
    0 => 'faq.installation.php',
    1 => 'Installazione',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'faq/databases.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="faq.databases" class="chapter">
  <h1 class="title">Problemi di Database</h1>

  

  <p class="para">
   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.
  </p>

  <div class="qandaset"><ol class="qandaset_questions"><li><a href="#faq.databases.mssql">
     
      Ho sentito che &egrave; possibile accedere al Server Microsoft SQL da PHP. Come?
     
    </a></li><li><a href="#faq.databases.access">
     Posso accedere ai database Microsoft Access?
    </a></li><li><a href="#faq.databases.mysql.deprecated">
     
      Perch&egrave; si scoraggia l&#039; utilizzo dell&#039; estensione MySQL (ext/mysql)
      che ho usato per pi&ugrave; di 10 anni? E&#039; stata deprecata? Cosa posso usare al suo posto?
      Come faccio a migrare?
     
    </a></li><li><a href="#faq.databases.mysqlresource">
     
      Perch&egrave; ottengo un errore che suona pi&ugrave; o meno cos&igrave;:
      &quot;Warning: 0 is not a MySQL result index in &lt;file&gt;
      on line &lt;x&gt;&quot; oppure &quot;Warning: Supplied argument is not
      a valid MySQL result resource in &lt;file&gt; on line &lt;x&gt;&quot;?
     
    </a></li></ol></div>
   <dl class="qandaentry" id="faq.databases.mssql">
    <dt><strong>
     
      Ho sentito che è possibile accedere al Server Microsoft SQL da PHP. Come?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Sulle macchine Unix puoi usare <a href="ref.pdo-odbc.php" class="link">PDO_ODBC</a>
      oppure <a href="book.uodbc.php" class="link">Unified ODBC API</a>.
     </p>
     <p class="para">
      Sulle macchine Windows puoi anche usare <a href="ref.pdo-sqlsrv.php" class="link">PDO_SQLSRV</a>
      oppure <a href="book.sqlsrv.php" class="link">SQLSRV</a>.
     </p>
     <p class="para">
      Guarda anche la risposta alla prossima domanda.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.databases.access">
    <dt><strong>
     Posso accedere ai database Microsoft Access?
    </strong></dt>
    <dd class="answer">
     <p class="para">
      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.
     </p>
     <p class="para">
      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.
      <a href="http://www.openlinksw.com/" class="link external">&raquo;&nbsp;OpenLink Software</a> ha dei driver
      ODBC basati su Unix che possono aiutarti in questo senso.
     </p>
     <p class="para">
      Un&#039;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:
      <blockquote class="blockquote">
       <p class="para">
        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
        &quot;Virtuoso&quot; (un motore virtuale di database) per NT, Linux e altre piattaforme Unix.
        Per favore, visita il nostro <a href="http://www.openlinksw.com/" class="link external">&raquo;&nbsp;sito web</a> per il download gratuito.
       </p>
      </blockquote>
     </p>
     <p class="para">
      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:
     </p>
     <p class="para">
      <ul class="itemizedlist">
       <li class="listitem">
        <span class="simpara">
         Installa MySQL sulla tua piattaforma seguendo le istruzioni di MySQL. 
         Le ultime disponibili su <a href="http://www.mysql.com/" class="link external">&raquo;&nbsp;http://www.mysql.com/</a>
         Non sono richieste speciali configurazioni, eccetto quando imposti il database, e configuri
         l&#039; account dell&#039; 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.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         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.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         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.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         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.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         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&#039; 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.
        </span>
       </li>
      </ul>
     </p>
     <p class="para">
      Trucchi e suggerimenti:
      <ul class="itemizedlist">
       <li class="listitem">
        <span class="simpara">
         Puoi costruire le tue tabelle in Access ed esportarle
         su MySQL, poi ricollegarle in direzione opposta. Questo velocizza
         la creazione delle tabelle.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         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.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         Se cambi una tabella in MySQL, devi ri-collegarla
         ad Access. Vai a tools&gt;add-ins&gt;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 &quot;always prompt for new location&quot;, prima
         di cliccare su OK.
        </span>
       </li>
      </ul>
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.databases.mysql.deprecated">
    <dt><strong>
     
      Perchè si scoraggia l&#039; utilizzo dell&#039; estensione MySQL (ext/mysql)
      che ho usato per più di 10 anni? E&#039; stata deprecata? Cosa posso usare al suo posto?
      Come faccio a migrare?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Ci sono tre estensioni MySQL, come descritto nella sezione
      <a href="mysqlinfo.api.choosing.php" class="link">Scegliere una API MySQL</a>. 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 <a href="book.mysqli.php" class="link">mysqli</a> oppure con
      <a href="ref.pdo-mysql.php" class="link">PDO_MySQL</a>. 
     </p>
     <p class="para">
      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.
     </p>
     <p class="para">
      Non è possibile mixare le estensioni. Quindi, ad esempio, passare una connessione mysqli a
      PDO_MySQL o ad ext/mysql non funziona.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.databases.mysqlresource">
    <dt><strong>
     
      Perchè ottengo un errore che suona più o meno così:
      &quot;Warning: 0 is not a MySQL result index in &lt;file&gt;
      on line &lt;x&gt;&quot; oppure &quot;Warning: Supplied argument is not
      a valid MySQL result resource in &lt;file&gt; on line &lt;x&gt;&quot;?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      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&#039;identificatore di risultato. Il modo corretto di farlo è con codice simile
      al seguente:
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$result </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT * FROM tables_priv"</span><span style="color: #007700">);<br />if (!</span><span style="color: #0000BB">$result</span><span style="color: #007700">) {<br />    echo </span><span style="color: #0000BB">mysql_error</span><span style="color: #007700">();<br />    exit;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      or
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$result </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT * FROM tables_priv"</span><span style="color: #007700">)<br />    or die(</span><span style="color: #DD0000">"Bad query: " </span><span style="color: #007700">. </span><span style="color: #0000BB">mysql_error</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
    </dd>
   </dl>
  
 </div>
<?php manual_footer($setup); ?>