0

*MySQL 稍后会升级。

前言:作者可以用两种语言注册,并且由于各种其他原因,这意味着 2 个数据库。我们意识到在使用多个数据库时设置看起来很奇怪,但更多的是这个简短的解释使它看起来如此。所以请忽略那个奇怪的东西。

情况:我的第一个查询生成了一个已取消订阅的作者的记录集。它在第一个数据库中找到它们。

require_once('ConnString/FirstAuth.php');

mysql_select_db($xxxxx, $xxxxxx);
$query_Recordset1 = "SELECT auth_email FROM Authors WHERE Cancel = 'Cancel'";
$Recordset1 = mysql_query($query_Recordset1, $xxxxxx) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

在它们也被列出的第二个数据库中,(表名和列名相同)我想更新它们,因为它们已取消。要选择他们的记录进行更新,我想获取第一个记录集,将其放入一个数组中,换出 connStrings,然后使用该数组进行搜索。

这些也有效。

$results = array();
do {
results[] = $row_Recordset1;
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));

print_r($results);

给了我一个数组。数组 ( [0] => 数组 ( [auth_email] => renault@autxxx.com ) [1] => 数组 ( [auth_email] => rinaldi@autxxx.com ) [2] => 数组 ( [auth_email] => hemingway@autxxx.com )) ...所以我知道它正在寻找第一组数据。

这就是问题所在:第二个数据库的查询通过 auth_email 查找作者,如果它是 $results 数组的“IN”,但它没有像我预期的那样在第二个数据库中找到作者。请注意不同的 connString

require_once('ConnString/SecondAuth.php');

mysql_select_db($xxxxx, $xxxxxx);
$query_Recordset2 = "SELECT auth_email FROM Authors WHERE auth_email IN('$results')";
$Recordset2 = mysql_query($query_Recordset2, $xxxxxx) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);

var_dump 为 0,但我知道应该找到两条记录。我已经尝试过各种 IN 组合,例如 {$results},但是当我遇到“'$results'”时,是时候寻求帮助了。我检查了所有可用的帖子,但没有一个能解决我的问题,尽管我现在更熟悉野鹅种群。

我想,因为我换掉了连接字符串,也许 $result 被设为空,所以我将它重新设置为原始的 connString 并且它仍然没有在同一个数据库中的 $results 中找到 auth_email,它肯定应该这样做。

此外,我之前已经换掉了 connStrings 并获得了积极的结果,所以......嗯......

我的目标是在工作时将 Recordset2 回显到一个带有 do/while 循环的表单中,这将允许我更新他们在第二个数据库中的记录。由于 var_dump 为 0,显然下面的这并没有给我第二个表中的作者列表,其电子邮件地址出现在 $results 数组中,但我将其作为示例包含在页面中启动表单的示例.

do { 
    $row_Recordset2['auth_email_addr '];
} while($row_Recordset2 = mysql_fetch_assoc($Recordset2));

与往常一样,您可以提供的任何指示都将受到赞赏,并接受正确的答案。

4

2 回答 2

1

如果您有一个可以访问数据库和表的 db 用户,只需使用跨数据库查询进行更新

UPDATE
  mydb.Authors,
  mydb2.Authors
SET
  mydb.Authors.somefield = 'somevalue'
WHERE
  mydb.Authors.auth_email = mydb2.Authors.auth_email AND
  mydb2.Authors.Cancel= 'Cancel'
于 2013-08-25T16:31:57.190 回答
0

IN子句排除了像这样格式化的变量IN(var1,var2,var3) 您应该使用函数来创建一个字符串,其中包含来自该数组的变量。

//the simplest way to go
$string = '';

foreach($results as $r){
 foreach($r as  $r){
 $string .= $r.",";
 }
}

$string = substr($string,0,-1); //remove the ',' from the end of string

它没有经过测试,显然不是最好的方法,但是向您展示您的问题的想法以及如何处理它,这段代码非常相关。

现在在查询中使用$string而不是$results

于 2013-08-25T16:30:56.950 回答