2012-09-05 81 views
0

似乎我是一個有點老派,當涉及到PHP/MySQL,說實話只是適應它,但現在我不斷告訴使用mysqli而不是mysql所以我一直在我閱讀一些文章和文章,包括php.net,但它沒有對我有意義,所以也許如果有人會給我一個相當於我的片段,我可能會開始理解它更好一點.. 。與此相當的mysqli是什麼?

這是一個簡單的MySQL while循環:

$query = "SELECT * FROM foo ORDER BY id DESC LIMIT 10, 10"; 
$result = mysql_query($query); 

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

$dog = $row['dog']; 

    echo $dog; 

} 

回答

1

等效使用mysqli在過程風格是:

$link = mysqli_connect("localhost", "user", "pass", "db"); 
$query = "SELECT * FROM foo ORDER BY id DESC LIMIT 10, 10"; 
$result = mysqli_query($link, $query) or die(mysqli_error($link)); 

while($row = mysqli_fetch_array($result, MYSQLI_BOTH)) { 
    $dog = $row['dog']; 
    echo $dog; 
} 

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

連接到db行可以放在一個配置文件,所以它可以從任何頁面調用使用'include('config.php');'是否suppost被稱爲每次需要使用它? –

+1

它可以放在另一個文件中,在您需要時隨時調用。只要記住你是否返回一個結果集來釋放它。 – Kermit

1

試試這個:

 
$query = "SELECT * FROM foo ORDER BY id DESC LIMIT 10, 10"; 
$result = mysqli_query($query) or die (mysqli_error()); 

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

$dog = $row['dog']; 

    echo $dog; 

} 
+0

到目前爲止,它只是將mysql更改爲mysqli,但我知道它不能那麼簡單,我已閱讀的所有內容似乎都使用'::'和'new' –

+0

@AnnaRiekic這些表明它們正在使用佔位符。它們充當防止SQL注入的方式。 – Kermit

1

的mysqli有兩種不同的接口,一個非常類似舊式的MySQL接口和一個面向對象的。

面向對象的版本就像是:

/* establish connection */ 
$mysqli = new mysqli("localhost", "user", "password", "database"); 
if ($mysqli->connect_errno) { 
    echo $mysqli->connect_error; 
    return; 
} 

/* query & fetch-loop */ 
$result = $mysqli->query("SELECT * FROM foo ORDER BY id DESC LIMIT 10, 10"); 
if (!$result) { 
    echo $mysqli->error; 
    return; 
} 
while ($row = $res->fetch_assoc()) { 
    $dog = $row['dog']; 
    echo $dog; 
} 

正如你所看到的,碼長是老式的版本差不多(只是忽略錯誤檢查和連接的斷開)。

順便說一句:mysqli文檔並不算太壞,你只需要跳過第一頁,因爲這個很奇怪。我會從這裏開始:http://www.php.net/manual/en/mysqli.quickstart.connections.php

相關問題