php - MySQL插入多个数据库-发出整个代码

标签 php mysql mysql-backup

我不想说太多,这是我的代码(我知道它不是 PDO,但一旦它可以工作它就会)。几乎一切正常!!!

现在我正在做日志,但我被卡住了! - 感谢 Michael 的更新,其中一些已修复!

$statresult=mysql_query($statsql, $actconn) or die(mysql_error());

功能也优化。由于某种原因,这不适用于多个数据库...

许可不希望是正确的,我已经看了几个小时,但我无法弄清楚。除此之外,一切都运转良好。

代码从真实数据库读取一些行并将它们移动到备份数据库。但我想要一个 cron 作业和电子邮件警报,所以我做了一个简单的日志(到表中),但它不想工作......我什至看不到任何错误日志。好吧:PHP 警告:mysql_query():提供的参数不是/home/sites/stcticketing.org/public_html/back/asu1.php 第 34 行中的有效 MySQL-Link 资源

<?php
// open db
$dbhost = 'localhost';
$actdbuser = 'user1';
$actdbpass = 'pass';

$bckdbuser = 'user2';
$bckdbpass = 'pass';

$actconn = mysql_connect($dbhost, $actdbuser, $actdbpass) or die ('act Error connecting to mysql');
$bckconn = mysql_connect($dbhost, $bckdbuser, $bckdbpass) or die (' back Error connecting to mysql');

$actdbname = '`web151-tevenyal`';
mysql_select_db($actdbname, $actconn);

$bckdbname = '`web151-bckproba`';
mysql_select_db($bckdbname, $bckconn);

//end opendb


//functions
function test($sqls, $states){
 if ($sqls=1){
   $resflag=1;
 }
 else {
   $resflag=0;
 }
 $statsql="INSERT INTO `web151-tevenyal`.`tex_bcklog` (`what`,`how`,`when`) VALUES ('$states',$resflag,CURDATE());";
 echo "<p>".$sqls."<br/>".$statsql."</p>"; 
 $statresult=mysql_query($statsql, $actconn) or die(mysql_error());
 echo "<p>".$states." - ".$resflag."</p>";
 $emaltext=$emailtext.$sqls;
}

function db_rows($db,$ord, $connectdb){
 $dbquery="SELECT azon FROM $db ORDER BY azon $ord LIMIT 1";
 $dbresult=mysql_query($dbquery, $connectdb);
 $row = mysql_fetch_array($dbresult);
 $dbrow = $row['azon'];
 return $dbrow;
}
// end of functions

//config information...
$acttable  = 'adat';
$today = date("yW_Hi");
$newdb = $bckdbname.".test_".$today;
test($permsql, "grant");
test(1, "backupstart");

//creating log table for backup results
$backtablesql="CREATE TABLE IF NOT EXISTS `tex_bcklog` ( `azon` int(11) NOT NULL AUTO_INCREMENT,`what` varchar(255) CHARACTER SET utf8 NOT NULL,  `how` varchar(255) CHARACTER SET utf8 NOT NULL,  `when` date NOT NULL,   PRIMARY KEY (`azon`)) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;" ;
//$backtableresult=mysql_query($backtablesql);



$firstact= db_rows($actdbname.".".$acttable,"asc", $actconn);
$lastact= db_rows($actdbname.".".$acttable,"desc", $actconn);
$upto=$firstact+25000;


if ($lastact-$firstact>50000) {

 //create a new table 
 $permsql="GRANT SELECT ON `$actdbuser`.* TO `$bckdbuser`@'%' ;";
 test($permsql, "grant");
 $perm = mysql_query($permsql, $bckconn) or die(mysql_error());

 $newdbsql="CREATE TABLE $newdb LIKE $actdbname.`$acttable`";
 test($newresult, "createdb");
 $newresult = mysql_query($newdbsql, $bckconn) or die(mysql_error());


 // copy all the data
 $query = "INSERT INTO $newdb SELECT * FROM $actdbname.$acttable WHERE $acttable.azon < $upto";
 test($query, "copyrows");
 $result = mysql_query($query) or die(mysql_error());

 // so what has happened...
 $delquery = "DELETE FROM $actdbname.$acttable WHERE $actdbname.$acttable.azon < $upto";
 test($delquery, "deleterows");
 $delresult = mysql_query($delquery, $actconn);

 // then tidy up everything:)
 $res = mysql_query('SHOW TABLE STATUS WHERE Data_free / Data_length > 0.1 AND Data_free >  102400', $actconn);
 while($optrow = mysql_fetch_assoc($res)) {
   mysql_query('OPTIMIZE TABLE ' . $optrow['Name']);
  }
 }
 else {
  test(0, "nothing");
 }

 // send an email to confirm what's happened - thanks:)

 // close db 
 mysql_close($actconn);
 mysql_close($bckconn);
 ?>

请先修复它,然后评论任何 PDO,除非解决方案本身:) 任何帮助将不胜感激!

最佳答案

在失败的函数内(在另一个函数 db_rows() 中正确完成),您的数据库资源链接变量超出了范围。将它们作为参数传递给函数:

例如,在此处将一个作为 $connection 传入:

function test($sqls, $states, $connection){
 if ($sqls=1){
   $resflag=1;
 }
 else {
   $resflag=0;
 }
 $statsql="INSERT INTO `web151-tevenyal`.`tex_bcklog` (`what`,`how`,`when`) VALUES ('$states',$resflag,CURDATE());";
 echo "<p>".$sqls."<br/>".$statsql."</p>"; 
 $statresult=mysql_query($statsql, $connection) or die(mysql_error());
 echo "<p>".$states." - ".$resflag."</p>";
 $emaltext=$emailtext.$sqls;
}

然后使用正确的连接调用该函数,如下所示:

test($permsql, "grant", $actconn);

关于php - MySQL插入多个数据库-发出整个代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820229/

相关文章:

php - SQL Union 只计算一个查询

mysql - 用于识别记录子集中的最大值的 SQL 查询,以用作批处理作业分区的边界条件

mysql - 从 Amazon RDS 下载 MySql 备份/快照

PHP 内爆具有增量值

php - 我在自定义 wordpress 主题中做错了什么

php - 为用户输入的文本字符串创建 MySQL 表

c# - 如何将 MySQL.Data 与我的 ClickOnce 应用程序打包在一起?

mysql - 通过在 MYSQL 中的左连接上获得真实结果来进行排序的最快方法

database - 备份 Wordpress 多站点

mysql - 将 SQL Server .bak 文件转换为 MYSQL 中的数据库