kenanのブログ

闘病生活

php5.1.6とPDOの不具合みたいな

CentOS5.2とかでphpが5.1.6でMySQLが5.0.77である環境にて

pdo.ini

dsn = "mysql:host=127.0.0.1;dbname=test;charset=utf8"
user = "kenan"
password = "hogefuga"

test.php

<?php
function dbConncet(){
    try {
        $ini = parse_ini_file('pdo.ini', FALSE);
	$db = new PDO($ini['dsn'], $ini['user'], $ini['password']);
	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	$db->query('SET CHARACTER SET utf8');
	    return $db;
	} catch (PDOException $e) {
	    return false;
	}
    }
}

function test_sql(){

	$db =& dbConncet();
	if ($db === false) {
	    return false;
	}
	try {
	    $db->beginTransaction();
	    $sql1 = "select id, title from test";
	    $stmt1 = $db->query($sql1);

	    $sql2 = "insert into test2 (id, title) values(:id, :title)";
	    $stmt2 = $db->prepare($sql2);

	    while($row = $stmt1->fetch(PDO::FETCH_ASSOC)){
	        $stmt2->bindValue(':id', $row['id']);
		$stmt2->bindValue(':title', $row['title']);
		$stmt2->execute();
	    }
	} catch(PDOException $e){
	    $db->rollBack();
	    $e->getMessage();
	}
	$db = NULL;
}

1つのコネクション使いまわそうとしてこんな感じ書いたんですが。

stmt2->execute();のところでphpが止まってしまう。

バグレポートにて
http://bugs.php.net/bug.php?id=38861
同じように使おうとして、思った結果が返ってこない。という報告があって
直したようなことが書いてあるのでバグだったようです。

バグ事態が2006年のものなのでphpのバージョン新しくすればいいようですね。
ちなみにCentOS5.2ではデフォルトでyumからphpを入れた場合
5.1.6を入れてくれるので気をつけないといけないのかな。
もしくはPDOとか使うのが良くないのか。

phpとか全然よく知らないのでどうしていいやら。

とりあえず面倒になったので僕はLAMPPで5.3.0を入れました。
無事動いてくれたのでとてもよかったです。