gpt4 book ai didi

php - Mysqli 准备语句到多个数据库

转载 作者:搜寻专家 更新时间:2023-10-31 21:17:28 25 4
gpt4 key购买 nike

我正在研究从一个数据库到另一个数据库的导入功能,我想尝试一下内置的 Mysqli 功能。

我已经打开了两个连接,一个用于每个数据库,然后循环遍历旧连接(以获取现有用户)并在选择是否插入数据之前对新连接运行检查。

现在我不确定我是在滥用准备好的语句功能,还是因为我无法获得正确的结果。一个简单的测试用例是:

$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);}

我在 $oldDB 上的第一个查询运行良好并循环遍历用户,但是当我在 $newDB 中查找 user_id 时准备好的语句它只返回第一个结果的 user_id

这是我得到的输出示例:

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)

有人知道我做错了什么吗?我浏览了 Mysqli 文档,但没有找到任何对我有帮助的东西。

最佳答案

好的,我发现了问题,一切正常,但似乎 mysqli_stmt::bind_result() 中使用的变量不会更新,除非找到一行。在我的测试中,只找到了第一个用户,这导致每次都返回 1。

mysqli_stmt::fetch() 将在未找到结果时返回 NULL,因此我只需像这样稍微修改我的代码:

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();    if($searchUserStmt->fetch() === NULL)    {        // Insert user here    }    $searchUserStmt->reset();}

关于php - Mysqli 准备语句到多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5604044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com