Je travaille sur une fonctionnalité d'importation d'une base de données à une autre et j'ai pensé essayer les fonctions intégrées de Mysqli.Mysqli a préparé des instructions pour plusieurs bases de données
J'ai ouvert deux connexions, une pour chaque base de données, et je parcourt l'ancien (pour obtenir les utilisateurs existants) et exécute des contrôles sur le nouveau avant de choisir d'insérer ou non les données. Maintenant, je ne suis pas sûr si j'utilise mal la fonction des instructions préparées ou ce que j'ai de la difficulté à obtenir les bons résultats. Un cas de test simple est:
$oldDB = new Mysqli(HOST, USER, PASS, 'oldDB'); $newDB = new Mysqli(HOST, USER, PASS, 'newDB'); /* * Prepared statments */ $searchUserStmt = $newDB->prepare('SELECT user_id FROM members WHERE user_id=?'); $searchUserStmt->bind_param('i', $old_user_id); $searchUserStmt->bind_result($user_id); /** * Loop through users */ $result = $oldDB->query('SELECT * FROM member_profile LIMIT 10'); while($row = $result->fetch_assoc()) { var_dump($row['user_id']); // Check if user is already in DB $old_user_id = $row['user_id']; $searchUserStmt->execute(); $searchUserStmt->fetch(); $searchUserStmt->reset(); var_dump($user_id); }
Ma première requête sur $oldDB
fonctionne très bien et une boucle par les utilisateurs mais quand je regarde le user_id
dans le $newDB
avec la déclaration préparée, il ne retourne que le user_id
du premier résultat.
Voici un exemple de sortie j'obtenir:
string(1) "1" int(1) string(2) "31" int(1) string(2) "26" int(1) string(3) "105" int(1) string(2) "34" int(1) string(3) "119" int(1) string(2) "36" int(1) string(2) "37" int(1) string(2) "38" int(1) string(2) "39" int(1)
Est-ce que quelqu'un a une idée de ce que je fais mal? J'ai été à travers les docs Mysqli, mais je n'ai rien trouvé qui m'a aidé.