こんにちは、ねこです。

自称プログラマのおばちゃんのブログです。いろいろあるよねぇ~。

PHP「Non-persistent connections」と「Persistent connections」の奇妙なエラー

2017-02-15 07:52:22 | PHP

『では今からバグなおしまーす。これはSQLエラーなんで、順番悪いか、なにか抜けてるのかといったところかな?』

なんてことを昨日書いたと思いますが、わかりやした。。。

なんか、接続が安定しないというか、エラーがランダムででてきよる。

理由は、「Non-persistent connections-非持続的データベース接続」と「Persistent connections-持続的データベース接続」でした。

実際にどこで別れるのかというと、ここ。

[Persistent connections持続的データベース接続]

$dbh = new PDO('odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=system;HOSTNAME=host;DATABASE=SxxxVxxx;NAMING=1;', 'user', 'pass', array(

ここ→ PDO::ATTR_PERSISTENT => false

 ));

[Non-persistent connections非持続的データベース接続]

$dbh = new PDO('odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=system;HOSTNAME=host;DATABASE=SxxxVxxx;NAMING=1;', 'user', 'pass', array(

ここ→ PDO::ATTR_PERSISTENT => true

 ));

 エラーに「接続がきれます」なんてことがかいてあったらか、多分「非持続的」を最初に使ってたねこの場合、ロールバックされるときと、されずにエラーで終わっていたときがランダムにでてきていたことが理解できる。

だから、サーバーのライフサイクルを考えて接続を最後にきってやらないといけないのが、「接続的」、でトランザクションが処理された後に勝手に接続を切ってくれるのが「非接続的」。

こちらを読んで勉強してね。

PHPマニュアル

ローカルから接続してたねこのマシーンが細かいトランザクションに間に合わなかったのかなぁ。。。

その辺はよーわかりません。

ねこでした。


Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] PHPびぃ~くりっ!でもよくありますよねぇ。。。

2017-02-15 07:10:23 | PHP

おはようございます。

こちら、『stackoverflow』様より引用

とってもいい例だとおもって今日は載せます。

まず、PDOにしてみたという意味でいい例です。

 

 

 

そして、こんなんありぃ~っ!!ってな感じで指摘された意味でいい例です。

「include('config.php');追加してください。」

ですって。

そう、これが答え。

自分のコードのエラーは時間かけた分どうしても難しく考えてしまって、第三者の方から指摘されるまで'config.php'ファイルをincludeすること忘れてたなんてこと、全然思いもしないんです。特にこのPDOのドライバ関係はとっても複雑で、mySqlとかDB2だとか、はたまたiSeries Access ODBC Driverなんてほんといろいろありすぎるんですよね。ねこも苦労しました。

でも、このデータ処理の部分は大きく分けて二つのエラーに分かれると思います。
ひとつは、この例のように「SQL」関係のエラー。もうひとつは、rollBack()されたときのエラー。これは、「try-catch block」で新しいトランザクションが上手くいかなかった場合。
って、ねこは思ってますが、これもひとえにはいえないのかもね。
 
では今からバグなおしまーす。これはSQLエラーなんで、順番悪いか、なにか抜けてるのかといったところかな?
 
読んでくれて有難う。
 
ねこでした。