关于QBWC调用Web应用时CreateUser调用时机及用户校验的问询
QuickBooks
createUser 调用时机与用户存在性检查 嘿,我来帮你理清这个问题:
调用时机
createUser 方法只需要针对特定用户首次调用一次就足够了,完全不需要每次执行脚本都调用它。重复调用的话,因为用户名在quickbooks_user表中通常是唯一约束的,大概率会抛出数据库重复键的错误,反而会导致脚本异常。
如何检查用户是否已创建
你猜的没错!直接查询quickbooks_user表是最直接有效的方式——因为QuickBooks的QuickBooks_Utilities类确实没有提供封装好的用户存在性检测方法,我们可以自己写个简单的数据库查询逻辑来实现。
结合你现有的代码,修改后的版本可以这样写:
$dsn = 'your_dsn_here'; // 替换成你的数据库DSN $targetUser = 'your_target_username'; // 要检查的用户名 $targetPass = 'your_target_password'; // 对应用户密码 if (!QuickBooks_Utilities::initialized($dsn)) { QuickBooks_Utilities::initialize($dsn); QuickBooks_Utilities::createUser($dsn, $targetUser, $targetPass); } else { // 直接查询数据库检查用户是否存在 try { $dbConn = new PDO($dsn); $checkStmt = $dbConn->prepare("SELECT 1 FROM quickbooks_user WHERE qbuser_username = ? LIMIT 1"); $checkStmt->execute([$targetUser]); $userExists = $checkStmt->fetch() !== false; if (!$userExists) { // 用户不存在时才创建 QuickBooks_Utilities::createUser($dsn, $targetUser, $targetPass); } else { // 用户已存在,执行队列操作 $Queue = new QuickBooks_WebConnector_Queue($dsn); $Queue->enqueue(QUICKBOOKS_QUERY, 6); } } catch (PDOException $e) { // 处理数据库连接/查询异常 error_log('检查用户存在性时出错: ' . $e->getMessage()); } }
补充说明
- 这里用PDO直接操作数据库是最轻量化的方式,不需要依赖额外的封装类,逻辑清晰也容易维护。
- 确保你的DSN对应的数据库账户拥有
quickbooks_user表的查询权限,否则会抛出权限错误。 - 如果是多用户场景,只需要扩展这个查询逻辑,批量检查或针对不同用户单独处理即可。
内容的提问来源于stack exchange,提问作者Derek Joseph Olson
相关产品推荐
相关产品推荐

