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を入れました。
無事動いてくれたのでとてもよかったです。