* 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查找作者,如果它是' IN' $ results数组,但它没有像我预期的那样在第二个数据库中找到作者。请注意不同的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被设为null所以我将它重新设置为原始的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));
与往常一样,您可以提供任何指针,并且接受正确的答案。
答案 0 :(得分:1)
如果您有一个可以访问数据库和表的数据库用户,只需使用跨数据库查询来执行更新
UPDATE
mydb.Authors,
mydb2.Authors
SET
mydb.Authors.somefield = 'somevalue'
WHERE
mydb.Authors.auth_email = mydb2.Authors.auth_email AND
mydb2.Authors.Cancel= 'Cancel'
答案 1 :(得分:0)
IN
子句除了像IN(var1,var2,var3)
这样形成的变量之外
您应该使用function来创建一个字符串,其中包含此数组中的变量。
//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