觀察 PDO-MySQL 連接資料庫、執行預存程序、執行 execute()、取得資料的返回結果

PDO-MySQL 連接資料庫、執行預存程序、執行 execute()、取得資料返回結果

使用 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();
}

流程一:使用 var_dump() 觀察預存結果 prepare 會顯示

$sql = "SELECT * FROM `users` WHERE sn = 1";
//$sth = $conn->prepare($sql);
var_dump($conn->prepare($sql));

顯示結果:
單純返回一個物件,這個步驟並不檢查SQL語法,所以就算是空、或錯的SQL語法也只是把值填入此物件屬性
object(PDOStatement)#2 (1) { [“queryString”]=> string(34) “SELECT * FROM `users` WHERE sn = 1” }
object(PDOStatement)#2 (1) { [“queryString”]=> string(0) “” }

流程二:使用 var_dump() 觀察 $sth->execute() 返回的值

$sth->execute();
var_dump($sth->execute());

顯示結果:
bool(true)
bool(false)

流程三:使用 var_dump() 觀察資料倒出的 fetch()

$row = $sth->fetch(PDO::FETCH_ASSOC);
var_dump($row);
if($row)
{
   foreach($row as $key => $value)
   {
        echo $key." : ".$value."<br />";
   } 
}
else
{
    echo "No Data.";
}

顯示結果:
如果有值:
array(5) { [“sn”]=> string(1) “1” [“name”]=> string(9) “王小明” [“mail”]=> string(13) “aaa@gmail.com” [“home”]=> string(31) “台南縣新化區中正路1號” [“message”]=> string(15) “第 1 筆資料” }
如果沒值:
bool(false)