前提・実現したいこと
PHP初心者です。ちょっと説明が下手ですが、他サイトの指定classの<h1>要素の値を取得をして、DBの値と一致したら特定のカラムのみ全件更新させたいと思っています。
発生している問題・エラーメッセージ
プログラムは出来ていますが、全件に更新させたいのですが、なぜかDBの最後のレコードしか更新されません。
サイトのスクレイピングにphpQuery-onefile.phpを利用しています。
該当のソースコード
<?php try { $pdo = new PDO('mysql:host=localhost;dbname=##;charset=utf8', '##', '##', array(PDO::ATTR_EMULATE_PREPARES => false)); } catch (PDOException $e) { exit('データベース接続失敗。'.$e->getMessage()); } $stmt = $pdo->query('SELECT * FROM model'); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $ttitle = $row['url']; } require_once 'phpQuery-onefile.php'; $html = file_get_contents($ttitle); $doc = phpQuery::newDocument($html); $test = $doc['.test2 h1']->text(); try { // 静的プレースホルダを指定 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // DBエラー発生時は例外を投げる設定 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare('UPDATE model SET status=:status WHERE url=:url'); //トランザクション処理 $pdo->beginTransaction(); try { $stmt->bindParam(':status', $test); $stmt->bindParam(':url', $ttitle); $stmt->execute(); //コミット $pdo->commit(); } catch (PDOException $e) { //ロールバック $pdo->rollback(); throw $e; // } // 接続を閉じる $pdo = null; } catch (PDOException $e) { // UTF8に文字エンコーディングを変換します echo mb_convert_encoding($e->getMessage(), 'UTF-8', 'SJIS-win'); die(); }
試したこと
どうしても最後のレコードしか反映されない状態で悩んでいます。
ご教授をお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/06 22:28
2018/08/06 22:39
2018/08/06 22:46
2018/08/06 22:50
2018/08/06 22:58
2018/08/06 23:01 編集
2018/08/06 23:09 編集
2018/08/06 23:24
2018/08/06 23:30
2018/08/07 03:25 編集
2018/08/07 03:27
2018/08/07 03:37
2018/08/07 04:16
2018/08/07 04:18
2018/08/07 04:23