PDA

View Full Version : [PHP-MySQL] Connessione al db su un file esterno


Alhazred
04-12-2009, 18:16
Sono in questa situazione: vorrei non dover riscrivere ogni volta il codice per la connessione al db in ogni file in cui ne ho bisogno, quindi ho deciso di scriverlo in un file e includere questo nei file dove serve.

Il file per la connessione che ho scritto è questo

<?php
$host = "localhost";
$user = "root";
$pass = "root";
$dbname = "nomedb";

$conn = mysql_connect($host, $user, $pass) or die('Impossibile stabilire una connessione col database');
mysql_select_db($dbname) or die('Impossibile selezionare il database');
?>

e sto provando in un file se funziona, il file di prova è questo

<?php
include_once("connect.php"); //è il file scritto sopra

function registra($dati) {
$query = "INSERT INTO tabella (nome) VALUES ('Pippo')";

mysql_query($query,$conn);

if(!mysql_error($conn)) {
return true;
}
else {
return false;
}
}
?>

Ottengo questi errori in corrispondenza della funzione mysql_query e di mysql_error.
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\development\php\provadb\include\dbfunc.php on line 7

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\development\php\provadb\include\dbfunc.php on line 9

dbfunc.php è il secondo file di cui ho scritto il codice

Dovrebbe dipendere dallo scope delle variabili, ma come risolvo?

Torav
04-12-2009, 20:45
per utilizzare una variabile definita all'esterno in una funzione la devi dichiarare all'intero del corpo della funzione preceduta dalla keyword global:


function registra($dati) {
global $conn;
/* resto della funzione */
}

kurts
04-12-2009, 21:10
oppure potresti trasformare il primo pezzod i codice in una funzione che poi richiami nei files nei quali hai bisogno di accedere al db.

P.S.: meglio usare require_once piuttosto che include_once

Alhazred
05-12-2009, 09:24
Grazie ad entrambi, la soluzione con global l'avevo tentata, ma senza successo.
Poi ho scoperto che c'erano casini con gli include ed ho risolto.