PDOでの数値の扱いで盛大にコケたお話


てか、まだPHPでPDO使ってないの?笑

[Sat Apr 12 12:27:27 2014] [error] [client 192.168.0.***] PHP Fatal error: ******************

WTF


解決策 -> PDOでの数値列の扱いにはワナがいっぱい(2) — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something

つまり?
// $user_id は Twitterの user_id です。
// $_GET['oauth_verifier'] で取得した値とします

$_GET とかで取得した値は全てstring (重要)

// 問題のコード
$pdo = new PDO(ConnectSQL(), Setting::DB_UserName, Setting::DB_Password);
$sth = $pdo->prepare('SELECT * FROM `'.Setting::DB_Table.'` WHERE id = :id');
$sth->bindValue(':id', $user_id, PDO::PARAM_INT); // ここでエラー(PDO::PARAM_INT は bool -> int だけ)
$sth->execute();
while ($row = $sth->fetch()) {
	// 略
}

こうする

$pdo = new PDO(ConnectSQL(), Setting::DB_UserName, Setting::DB_Password);
$sth = $pdo->prepare('SELECT * FROM `'.Setting::DB_Table.'` WHERE id = :id');
$sth->bindValue(':id', (int) $user_id, PDO::PARAM_INT); // キャストしてあげる
$sth->execute();
while ($row = $sth->fetch()) {
	// 略
}