PDO::exec() の戻り値に問題があります。
//スクリプトの実行時間を無制限に設定します
set_time_limit(0);
//PDO を使用して pgsql 接続を作成します
try {
$pgLink = new PDO('pgsql : host=localhost port=5432 dbname=db2 user=root パスワード=111111');
}catch(Exception $e) {
echo $e->getMessage();
}
//SQL 修正文の定義
$sql = "UPDATE trade.membership SET 性別=1,birth_type=0,name='wsy',birthday='2011-01-01',email='', join_date = '2011-01-02'、status=1、address='aaaa'、id_number='25454'、postcode='100031'、phone='666'、type_id=1 WHERE mobile='110';";
//SQL ステートメントを実行
$result = $pgLink->exec($sql);
//SQL 結果を出力
echo $result.'   ; '.$sql;
出力結果:
1 UPDATE trade.membership SET 性別=1、birth_type=0、name='wsy'、birthday='2011-01-01'、email= ' '、join_date='2011-01-02'、status=1、address='aaaa'、id_number='25454'、postcode='100031'、phone='666'、type_id=1 WHERE mobile='110' ;
問題は次のとおりです:
このテーブルには mobile='110' 行がまったくありません。ローカル SQL サーバーで $sql ステートメントを実行しても、「影響を受ける行は 0 行」になります。
しかし、なぜプログラムの結果は「1」なのでしょうか? PDO::exec() の出力結果は、追加、削除、または変更された影響を受ける行の数ではないでしょうか?
-----解決策---------
これは PDO のバグであるはずです。前処理を使用してから、PDO::rowCount() を使用して正しく処理してください。