2011-04-09 40 views
3

我正在处理从一个数据库到另一个数据库的导入功能,并认为我会尝试构建Mysqli功能。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); 

}

当我在$newDB仰望user_id用事先准备好的声明它只返回的第一个结果的user_id我上$oldDB第一查询运行良好,并遍历用户不过。

这里的输出我得到的一个样本:

 
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文档,但没有找到任何帮助我的东西。

回答

2

好吧,我发现这个问题,事情工作正常,但看起来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(); 

}