Php Mysqli为多个数据库准备了语句

Php Mysqli为多个数据库准备了语句,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我正在开发一个从一个数据库到另一个数据库的导入功能,我想试试内置的Mysqli功能 我已经打开了两个连接,每个数据库一个,在选择是否插入数据之前,我正在循环使用旧的连接(以获取现有用户),并对新的连接进行检查 现在我不确定我是否误用了prepared statements功能,或者是什么,因为我很难得到正确的结果。一个简单的测试用例是: $oldDB = new Mysqli(HOST, USER, PASS, 'oldDB'); $newDB = new Mysqli(HOST, USER,

我正在开发一个从一个数据库到另一个数据库的导入功能,我想试试内置的Mysqli功能

我已经打开了两个连接,每个数据库一个,在选择是否插入数据之前,我正在循环使用旧的连接(以获取现有用户),并对新的连接进行检查

现在我不确定我是否误用了prepared statements功能,或者是什么,因为我很难得到正确的结果。一个简单的测试用例是:

$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); }
有人知道我做错了什么吗?我浏览了Mysqli文档,但没有找到任何对我有帮助的东西

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

当找不到结果时,
mysqli\u 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(); } 而($row=$result->fetch_assoc()) { var_dump($row['user_id']); //检查用户是否已在数据库中 $old_user_id=$row['user_id']; $searchUserStmt->execute(); 如果($searchUserStmt->fetch()==NULL) { //在此处插入用户 } $searchUserStmt->reset(); } 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(); }