PHP冻结:如何循环连接到2个MySQL数据库
如何执行该循环:PHP冻结:如何循环连接到2个MySQL数据库,php,mysql,loops,freeze,Php,Mysql,Loops,Freeze,如何执行该循环: while ($row = mysql_fetch_array($result)) { collectData($row['NAME']); } 30秒后不冻结我的PHP 我认为可以通过将整个数据库放入数组或*.temp文件来处理它,而不是每次我想要输入/输出某些内容时都连接。但是我在文件和数组方面有问题,所以我问:快速、无痛地完成任务的更好/最好的方法是什么 <?php //fiveMin - Database that data is taken form
while ($row = mysql_fetch_array($result)) {
collectData($row['NAME']);
}
30秒后不冻结我的PHP
我认为可以通过将整个数据库放入数组或*.temp文件来处理它,而不是每次我想要输入/输出某些内容时都连接。但是我在文件和数组方面有问题,所以我问:快速、无痛地完成任务的更好/最好的方法是什么
<?php
//fiveMin - Database that data is taken form
//HighCharts - Database that data is transferred to
$fiveMin=mysql_connect($fiveMin_host,$fiveMin_user,$fiveMin_pass);
mysql_select_db($fiveMin_db,$fiveMin) or die (mysql_error());
$query="SELECT * FROM BetterShopItemStock";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
collectData($row['NAME']);
}
function collectData($itemID) {
global $fiveMin_host, $fiveMin_user, $fiveMin_pass, $fiveMin_db, $week_host, $week_user, $week_pass, $week_db;
$fiveMin=mysql_connect($fiveMin_host,$fiveMin_user,$fiveMin_pass); //Load and store data from fiveMin Database
mysql_select_db($fiveMin_db,$fiveMin) or die (mysql_error());
$function_Query="SELECT AMT FROM BetterShopItemStock WHERE NAME = '$itemID'";
$function_Ask = mysql_query($function_Query);
$function_Result = mysql_fetch_row($function_Ask, 0);
$dataReadyToImport = "," . $function_Result[0];
@mysql_close($fiveMin);
$HighCharts=mysql_connect($week_host,$week_user,$week_pass); //Save stored data to weekly Database
mysql_select_db($week_db,$HighCharts) or die (mysql_error());
$function_Query="SELECT AMT FROM BetterShopItemStock WHERE NAME = '$itemID'";
$function_Ask = mysql_query($function_Query);
$function_Result = mysql_fetch_row($function_Ask, 0);
$storedData = $function_Result[0];
$dataReadyToImport = $storedData . $dataReadyToImport;
mysql_query("UPDATE BetterShopItemStock SET AMT='$dataReadyToImport' WHERE NAME='$itemID'");
@mysql_close($HighCharts);
}
?>
(1)您不必为每个查询打开和关闭一个连接—为每个服务器打开一个连接,并对它们进行多个mysql\u query()
调用。这会让你的速度大大加快
(2) 不要使用“从BetterShopItemStock中选择*”。。。仅选择所需的行。(这里是“姓名”)。如果您已经在该表中查询“NAME”,则同时选择“AMT”,而不是再次调用它
(3) 您可以将对HighCharts的select和update调用组合到一个查询中
总之,一切都应该是这样的:
<?php
//fiveMin - Database that data is taken form
$fiveMin=mysql_connect($fiveMin_host,$fiveMin_user,$fiveMin_pass);
mysql_select_db($fiveMin_db,$fiveMin) or die (mysql_error());
//HighCharts - Database that data is transferred to
$HighCharts=mysql_connect($week_host,$week_user,$week_pass); //Save stored data to weekly Database
mysql_select_db($week_db,$HighCharts) or die (mysql_error());
$query="SELECT NAME,AMT FROM BetterShopItemStock";
$result = mysql_query($query,$fiveMin);
while ($row = mysql_fetch_row($result)) {
collectData($row[0],$row[1],$HighCharts);
}
function collectData($itemID, $itemAmt, $mysql) {
$id = mysql_real_escape_string($itemID);
$amt = mysql_real_escape_string($itemAmt);
$q = "UPDATE BetterShopItemStock SET ".
"AMT=CONCAT(AMT,',','$amt') WHERE NAME='$id'";
$r = mysql_query($q,$mysql);
return (!$r ? false : true);
}
//now close the databases
@mysql_close($HighCharts);
@mysql_close($fiveMin);
?>
将每个人分成几个类,然后使用它们。这样可以使它们更高效地运行,并且查询不会相互啮合:
<?php
class class1{
function fivemin(){
**code0**
}
function collectdata1-fivemin() {
class1::fivemin();
**code**
}
function collectdataHighcharts(){
class1::fivemin();
**code2**
}
}
$a = new class1;
$a->collectdata1-fivemin();
$a->collectdata1HighCharts();
?>
PHP冻结或消亡是因为(默认)30秒的最长执行时间已经过去了吗?它停止的速度甚至比30秒还要快,但说它扩展了它。请原谅我,但这里有多个mySqlquery?你为什么要改变我的方法?我将数据从一个数据库添加到另一个数据库<代码>函数collectData($itemID,$itemant,$mysql)
-这太糟糕了。为什么我必须包含$itemAmt和$mysql?包含$itemAmt
可以避免您必须进行第二次SELECT
调用才能获得AMT
列。而$mysql
只是您将要更新的数据库的mysql连接(这里,$HighCharts
)什么$a->collectdata1-fivemin()代码>是什么?