2015-03-06 13 views
5

Jestem nowy mysqli i przechodziła kursie z: http://www.binpress.com/tutorial/using-php-with-mysql-the-right-way/17#comment1mysqli połączenie i kwerendy

byłem w stanie połączyć się z bazą danych przy użyciu to:

$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! 

Ale potem próbowałem owijając go w funkcja (jak omówiono w samouczku) ... Zobaczyłem, że wywołujesz funkcję połączenia z innej funkcji ... w samouczku każda funkcja jest ciągle wywoływana z innej i innej ... i nigdy nie do końca się dowiedziałam, gdzie jest początkowe połączenie Zacząłem od uzyskania efektu domina funkcji nawołujących się nawzajem ... więc mimo to próbowałem zatrzymać go po drugiej tylko po to, aby przetestować i nauczyć się ... ale to " S nie działa i nie wiem dlaczego:

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

Jest to problem zakresu. Przekaż zmienną połączenia w swoich funkcjach. –

+0

Skorzystałem z tego ranka * Ralph *, ale kawa zniszczyła wszelkie wyobrażenie, które zrobiłem. @ Fred-ii- ;-) –

+0

@JayBlanchard Jesteś pewien, że nie masz podwójnego espresso? Och, czekaj, zrobiłem. * Silly Sam I am! * –

Odpowiedz

1

Dobrze skończyło się na wyciągnięciu go z funkcji i wykonany kod super proste (wystaje z proceduralnego zamiast OOP chociaż wiele tutoriali wykorzystywać OOP - myślał, że to lepiej zacząć w ten sposób):

<?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

Oto proste rozwiązanie mysqli dla Ciebie:

$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(); 

Jeśli chwytając więcej niż jeden wiersz, robię to tak:

$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(); 

z błędem Handling: Jeśli jest to błąd krytyczny skrypt zakończy działanie z komunikatem o błędzie.

// 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(); 

Z obsługi wyjątków try/catch: To pozwala radzić sobie z wszelkimi błędami wszystko w jednym miejscu i ewentualnie kontynuować wykonanie, gdy coś się nie powiedzie, jeśli to pożądane.

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"; 
}