bredom
11/25/2017 - 10:34 PM

pdo

Using PDO

<?php 
//Connection
try {
	$db = new PDO('mysql:host=localhost;dbname=codecourse_pdo', 'root', '');
	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
	echo "Connection failed: " . $e->getMessage();
}

//Query
$query = $db->query("SELECT * FROM guestbook");
while ($row = $query->fetch()) {
	echo $row['message'] . "<br>";
}


//Prepare
$name = 'John';
$message = 'Test';

$sql = "INSERT INTO guestbook(name, message, posted) VALUES(:name, :message, NOW())";
$query = $db->prepare($sql);
$query->execute(array(
			':name' => $name,
			':message' => $message
		));
		


/*
Beware of lastInsertId() when working with transactions in mysql. The following code returns 0 instead of the insert id. 

try { 
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); 

    $stmt = $dbh->prepare("INSERT INTO test (name, email) VALUES(?,?)"); 

    try { 
        $dbh->beginTransaction(); 
        $tmt->execute( array('user', 'user@example.com')); 
        $dbh->commit(); 
        print $dbh->lastInsertId(); 
    } catch(PDOExecption $e) { 
        $dbh->rollback(); 
        print "Error!: " . $e->getMessage() . "</br>"; 
    } 
} catch( PDOExecption $e ) { 
    print "Error!: " . $e->getMessage() . "</br>"; 
} 
 

When no exception is thrown, lastInsertId returns 0. However, if lastInsertId is called before calling commit, the right id is returned.
*/
?>