2015-03-06 10 views
5

Sono nuovo di MySQLi e stava attraversando un tutorial da: http://www.binpress.com/tutorial/using-php-with-mysql-the-right-way/17#comment1collegamento mysqli e interrogazione

ero in grado di connettersi al mio database che utilizza questo:

$config = parse_ini_file('../config.ini'); 
$connection = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']); 
if($connection === false) { 
die('Connection failed [' . $db->connect_error . ']'); 
} 
echo("hello"); //this worked! 

Ma poi ho provato avvolgendolo in una funzione (come discusso nel tutorial) ... Ho visto che chiami la funzione di connessione da un'altra funzione ... nel tutorial ogni funzione continua a ricevere chiamate da un'altra e un'altra ... e non ho mai trovato la chiamata iniziale è partito da per ottenere l'effetto domino delle funzioni che si chiamano a vicenda .. quindi, comunque, ho provato a fermarlo alle due solo per testare e insegnare a me stesso .. ma e ' s non funziona e non so perché:

function db_connect() { 
static $connection; 

if(!isset($connection)) { 
$config = parse_ini_file('../config.ini'); 
$connection = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']); 
    } 
if($connection === false) { 
return mysqli_connect_error(); 
} 
return $connection; 
echo("hello2"); 
} 

function db_query($query) { 
$connection = db_connect(); 
$result = mysqli_query($connection,$query); 
return $result; 
echo("hello1"); 

} 

db_query("SELECT `Q1_Q`,`Q1_AnsA` FROM `Game1_RollarCoaster`"); //this didn't work :(
+1

È un problema di ambito. Passa la variabile di connessione nelle tue funzioni. –

+0

Ho usato lo spazio questa mattina * Ralph *, ma il caffè ha cancellato ogni idea che ho fatto. @ Fred-ii- ;-) –

+0

@JayBlanchard Sei sicuro di non avere un doppio espresso? Oh aspetta, l'ho fatto. * Silly Sam I am! * –

risposta

1

Bene ho finito per prendere fuori delle funzioni e feci il codice super semplice (attaccare con procedurale, invece di programmazione orientata agli oggetti, anche se un sacco di tutorial usare OOP - pensato che fosse meglio iniziare in questo modo):

<?php 
$config = parse_ini_file('../config.ini'); 
$link = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']); 

if(mysqli_connect_errno()){ 
echo mysqli_connect_error(); 
} 


$query = "SELECT * FROM Game1_RollarCoaster"; 

$result = mysqli_query($link, $query); 

while ($row = mysqli_fetch_array($result)) { 

echo $row[Q1_Q] . '<-- Here is your question! ' . $row[Q1_AnsA] . '<-- Here is your answer! '; 

echo '<br />'; 

} 

mysqli_free_result($result); 
mysqli_close($link); 


?> 
2

Ecco una soluzione semplice mysqli per voi:

$db = new mysqli('localhost','user','password','database'); 
$resource = $db->query('SELECT field FROM table WHERE 1'); 
$row = $resource->fetch_assoc(); 
echo "{$row['field']}"; 
$resource->free(); 
$db->close(); 

Se stai prendendo più di una riga, lo faccio in questo modo:

$db = new mysqli('localhost','user','password','database'); 
$resource = $db->query('SELECT field FROM table WHERE 1'); 
while ($row = $resource->fetch_assoc()) { 
    echo "{$row['field']}"; 
} 
$resource->free(); 
$db->close(); 

Con Gestione degli errori: Se si verifica un errore fatale lo script terminerà con un messaggio di errore.

// ini_set('display_errors',1); // Uncomment to show errors to the end user. 
if ($db->connect_errno) die("Database Connection Failed: ".$db->connect_error); 
$db = new mysqli('localhost','user','password','database'); 
$resource = $db->query('SELECT field FROM table WHERE 1'); 
if (!$resource) die('Database Error: '.$db->error); 
while ($row = $resource->fetch_assoc()) { 
    echo "{$row['field']}"; 
} 
$resource->free(); 
$db->close(); 

Con try/catch gestione delle eccezioni: In questo modo avete a che fare con gli errori in un unico luogo e possibilmente continuare l'esecuzione quando qualcosa non riesce, se è desiderato.

try { 
    if ($db->connect_errno) throw new Exception("Connection Failed: ".$db->connect_error); 
    $db = new mysqli('localhost','user','password','database'); 
    $resource = $db->query('SELECT field FROM table WHERE 1'); 
    if (!$resource) throw new Exception($db->error); 
    while ($row = $resource->fetch_assoc()) { 
     echo "{$row['field']}"; 
    } 
    $resource->free(); 
    $db->close(); 
} catch (Exception $e) { 
    echo "DB Exception: ",$e->getMessage(),"\n"; 
}