PDO-fetchColumn() 取得一個欄位資料(只能取一個欄位)


有些時候,我們只想在資料表中取得某一個欄位資料,可以使用 fetchColumn()

資料表格式及資料如下

mysql> select * from users;
+----+-----------+----------------+---------------------------------------+-----------------+
| sn | name      | mail           | home                                  | message         |
+----+-----------+----------------+---------------------------------------+-----------------+
|  1 | 王小明 | aaa@gmail.com  | 台南縣新化區中正路1號       | 第 1 筆資料 |
|  2 | 陳小華 | chen@gmail.com | 台中市北屯區中華路100號     | 第 2 筆資料 |
|  3 | 王小白 | wang@gmail.com | 台北市信義區信義路一段1號   | 第 3 筆資料 |
+----+-----------+----------------+---------------------------------------+-----------------+
3 rows in set (0.00 sec)

使用 PDO 方式連線資料庫

$dbhost = '127.0.0.1';
$dbuser = 'ben';
$dbpasswd = '1234';
$dbname = 'phpmysql';
$dsn = "mysql:host=".$dbhost.";dbname=".$dbname;

try
{
    //注意,使用PDO方式連結,需要指定一個資料庫,否則將拋出異常
    $conn = new PDO($dsn,$dbuser,$dbpasswd);
    $conn->exec("SET CHARACTER SET utf8");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected Successfully";
}
catch(PDOException $e)
{
    echo "Connection failed: ".$e->getMessage();
}

星字號 * 為搜尋所有欄位,但由於我們使用 fetchColumn() 只會返回一個我們指定的欄位值(由0開始計算位置)

$sql = "SELECT * FROM `users` WHERE sn = 1";
$sth = $conn->prepare($sql);
$sth->execute();
$row = $sth->fetchColumn(0);
echo $row;

顯示結果:
1

如果我們指定只搜尋 name 欄位,由於只有一個欄位,所以使用 fetchColumn(0) 來取得結果

$sql = "SELECT name FROM `users` WHERE sn = 1";
$sth = $conn->prepare($sql);
$sth->execute();
echo $sth->fetchColumn(0);

顯示結果:
王小明

另外,若不指定 fetchColumn() 裡的值,預設值為 0,也就是搜尋結果的第 1 個欄位

$sql = "SELECT mail FROM `users` WHERE sn = 1";
$sth = $conn->prepare($sql);
$sth->execute();
$row = $sth->fetchColumn();
echo $row;

顯示結果:
aaa@gmail.com