Files
BE_IBL/scripts/migrate_nik_bidx.php
2026-05-31 15:19:55 +07:00

57 lines
1.5 KiB
PHP

<?php
/**
* Populate M_PatientNIK_bidx dari M_PatientNIK_enc yang sudah ada
* Jalankan via: php scripts/migrate_nik_bidx.php
* Aman dijalankan berulang: skip row yang sudah ada bidx-nya
*/
define('BASEPATH', true);
foreach (file(__DIR__ . '/../.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $l) {
if (strpos(trim($l), '#') === 0) continue;
[$k, $v] = array_map('trim', explode('=', $l, 2));
if ($k !== '') $_ENV[$k] = $v;
}
require __DIR__ . '/../application/libraries/Ibl_encryptor.php';
$enc = new Ibl_encryptor();
include __DIR__ . '/../application/config/database.php';
$cfg = $db['default'];
$pdo = new PDO(
"mysql:host={$cfg['hostname']};dbname={$cfg['database']};charset=utf8",
$cfg['username'], $cfg['password'],
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
echo "=== Populate M_PatientNIK_bidx ===\n";
$total = 0;
$batch = 500;
$stmt = $pdo->prepare(
"UPDATE m_patient SET M_PatientNIK_bidx = ? WHERE M_PatientID = ?"
);
while (true) {
$rows = $pdo->query(
"SELECT M_PatientID, M_PatientNIK_enc
FROM m_patient
WHERE M_PatientNIK_enc IS NOT NULL
AND M_PatientNIK_bidx IS NULL
LIMIT {$batch}"
)->fetchAll(PDO::FETCH_ASSOC);
if (empty($rows)) break;
foreach ($rows as $row) {
$nik = $enc->decrypt($row['M_PatientNIK_enc']);
$stmt->execute([
$enc->search_bidx((string)($nik ?? '')),
$row['M_PatientID'],
]);
$total++;
}
echo " {$total} rows...\n";
}
echo "Selesai: {$total} rows\n";