1. 程式人生 > >PHP使用mysqli進行資料讀取

PHP使用mysqli進行資料讀取

首先要與資料庫建立連線

$servername="servername";//資料庫地址如localhost
$username="username";
$password="password";
$conn=new mysqli($servername,username,password);

執行SQL語句可以通過mysqli執行也可以通過mysqli的例項執行

$sql="sql語句";
mysqli_query($conn,$sql);
conn->query($sql);

讀取查詢結果的方法

//conn->query($sql)會返回一個 mysqli_result物件,該類有fetch_assoc方法
while
($row=$result->fetch_assoc()) { echo ($row['name']);//這裡的name是標的列名。 } //也可以使用fetch_row方法 while($row=$result->fetch_row(){//或者mysqli_fetch_row($result) echo ($row[0]);//0是索引 /* 想要輸出一行中的所有資料時可以用foreach迴圈 foreach($row as $data){ echo $row; } 上面也可以用相同方法 */ echo
"<br>"; }

下面為上面兩個方法做出解釋,首先兩者最大的區別在於返回值的不同,fetch_assoc方法以鍵值對陣列形式返回一行資料,而fetch_row方法返回的是以列舉數值返回的一行資料。簡單來說就是對映方式不同,一個是以列名來獲取資料另一個是以索引來獲取資料。

重要事項

這兩個方法在每次執行的時候都會將指標向下移動一位!!!
$result是mysqli_result物件,裡面應該是有類似於陣列一樣的機制

/* 屬性 */
int $current_field ;
int $field_count;
array $lengths;
int
$num_rows;

文件就給了這些屬性,完全不知道他是怎麼遍歷的。。。給的方法也只給了使用方法,希望有大佬留言指教。

另一個需要注意的地方

官方文件對fetch_assoc的方法有這樣一段描述
If two or more columns of the result have the same field names, the last column will take precedence. To access the other column(s) of the same name, you either need to access the result with numeric indices by using mysqli_fetch_row() or add alias names.
翻譯過來大概意思就是說如果有兩個列名稱相同的話fetch_assoc方法會讓最後那個列的資料取代前面的資料,然後只返回一個數據,如果你想顯示所有的資料的話應當使用fetch_row()或者在查詢的時候使用別名。
這個問題發生的情況就是你在進行多表查詢的時候有時候會出現兩張表列重名的情況,這個時候你用fetch_assoc是無法 全部儲存在數組裡的,因為他裡面是以列名為索引,列名重複了,自然就會覆蓋前面的值。用fetch_row的話通過自動分配的數字索引就不會有這個問題,而另一個解決辦法則是通過使用別名修改儲存時的索引值,但是相對的在查詢的時候要使用別名作為索引名稱。

//$conn是mysqli的例項,table1和table2中都有name列
$result=$conn->query("select table1.name,table2.name as a from table1, table2" );
while($row =$result.fetch_assoc()){
    echo $row['name'].$row['a'];
}

其他的查詢方式以後在看吧,感覺這兩個可以可以對付大多數情況了,其他的再看吧。最後,請大佬們幫忙解答一下這兩個方法大概是怎麼實現的~~