2015-03-06 13 views
5

Tôi mới vào mysqli và đang trải qua một hướng dẫn từ: http://www.binpress.com/tutorial/using-php-with-mysql-the-right-way/17#comment1kết nối mysqli và truy vấn

tôi đã có thể kết nối với cơ sở dữ liệu của tôi sử dụng này:

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

Nhưng sau đó tôi đã cố gắng gói nó trong một hàm (như đã thảo luận trong hướng dẫn) ... Tôi thấy rằng bạn gọi hàm kết nối từ một hàm khác ... trong hướng dẫn, mỗi hàm giữ được gọi từ một hàm khác và một hàm khác ... và tôi chưa bao giờ tìm thấy nơi gọi ban đầu bắt đầu từ để có được hiệu ứng domino của các chức năng gọi eachother .. vì vậy dù sao, tôi đã cố gắng để ngăn chặn nó ở hai chỉ để kiểm tra và dạy bản thân mình .. nhưng nó ' s không làm việc và tôi không biết tại sao:

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

Đó là vấn đề về phạm vi. Vượt qua biến kết nối trong các hàm của bạn. –

+0

Tôi đã sử dụng phạm vi sáng nay * Ralph *, nhưng cà phê đã xóa sạch mọi khái niệm mà tôi đã làm. @ Fred-ii- ;-) –

+0

@JayBlanchard Bạn chắc chắn bạn không có cà phê espresso kép? Oh khoan đã, tôi đã làm. * Silly Sam I! * –

Trả lời

1

Vâng tôi đã kết thúc lấy nó ra khỏi các chức năng và thực hiện các mã siêu đơn giản (gắn bó với thủ tục thay vì OOP mặc dù rất nhiều các hướng dẫn sử dụng OOP - nghĩ rằng nó là tốt hơn để bắt đầu theo cách này):

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

Dưới đây là một giải pháp đơn giản để bạn mysqli:

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

Nếu bạn đang lấy nhiều hơn một dòng, tôi làm điều đó như thế này:

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

Với Xử lý lỗi: Nếu có một lỗi nghiêm trọng kịch bản sẽ chấm dứt với một thông báo lỗi.

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

Với xử lý ngoại lệ try/catch: này cho phép bạn đối phó với bất kỳ lỗi tất cả ở một nơi và có thể tiếp tục thực hiện khi có điều gì không, nếu đó là mong muốn.

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"; 
} 
Các vấn đề liên quan