在2个数据库中提交记录

时间:2013-09-27 09:31:13

标签: php mysql

我有一个表单,我想在2个数据库中提交表单数据。但问题是:两个数据库都在不同的服务器上。我是mysql的新手,所以我不确切知道如何做到这一点。我在php工作。我正在与你分享我的代码,它无法正常工作。所以请检查一下:

$con = mysql_connect('differenthost','user1','pass1');
mysql_select_db('dbname1',$con);

$path = "misc/classified/".$submiturl;

mysql_query("insert into tablename1 (title,description,status,parent_id,path) values ('$submiturl','$submiturl','active','68','$path')") or die(mysql_error());
mysql_close($con);

mysql_connect('localhost','user2','pass2');
mysql_select_db('dbname2');

$check = mysql_query("select count(*) from tablename2 where userid = '".$_SESSION['userid']."' and datecreated = '$datecreated'") or die(mysql_error());

我提交表单时会出现此错误:

Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'differenthost' (25) in /home/class/public_html/microworker/submiturl.php on line 11

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/class/public_html/microworker/submiturl.php on line 12

Warning: mysql_query() [function.mysql-query]: Access denied for user 'user2'@'localhost' (using password: NO) in /home/class/public_html/microworker/submiturl.php on line 16

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/class/public_html/microworker/submiturl.php on line 16
Access denied for user 'user2'@'localhost' (using password: NO)

什么是正确的语法?

6 个答案:

答案 0 :(得分:1)

在您的连接字符串中使用了错误的服务器名称

$con = mysql_connect('differenthost','user1','pass1');

用户localhost作为您的服务器名称

$con = mysql_connect('localhost','user1','pass1');

并且应该是您的完整代码

$con = mysql_connect('localhost','user1','pass1');
        mysql_select_db('dbname1',$con);

        $path = "misc/classified/".$submiturl;

        mysql_query("insert into tablename1 (title,description,status,parent_id,path) values ('$submiturl','$submiturl','active','68','$path')") or die(mysql_error());
        mysql_close($con);

        mysql_connect('localhost','user2','pass2');
        mysql_select_db('dbname2');

        $check = mysql_query("select count(*) from tablename2 where userid = '".$_SESSION['userid']."' and datecreated = '$datecreated'") or die(mysql_error());

或者如果您使用的是远程主机,请检查主机名

答案 1 :(得分:1)

'localhost'将您连接到同一服务器上的数据库。要访问不同服务器上的数据库,请提供其实际主机而不是“differenthost”。

然后当您连接到第二台服务器(第二次调用mysql_connect)时,获取并保存连接值,然后每次为每个新查询重新连接时都不需要重新连接。正如您对finction mysql_query所知,您可以传递第二个参数 - 它是数据库的链接。

切换到较新的扩展名MySQLi,很快就会弃用。

答案 2 :(得分:0)

该行

Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'differenthost' (25) in /home/class/public_html/microworker/submiturl.php on line 11

清楚地表明您的应用程序无法连接到数据库。尝试在此行中提供正确的主机名和/或用户名/密码

$con = mysql_connect('differenthost','user1','pass1');

答案 3 :(得分:0)

首先,您应该检查您的连接是否成功。您在第一个实例中遇到连接错误。

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

请参阅http://www.php.net/manual/en/function.mysql-connect.php

答案 4 :(得分:0)

使用此代码

你可以在mysql_query中使用$ con和$ con2作为第二个参数

$con = mysql_connect('differenthost','user1','pass1');
mysql_select_db('dbname1',$con);

$path = "misc/classified/".$submiturl;

mysql_query("insert into tablename1 (title,description,status,parent_id,path) values ('$submiturl','$submiturl','active','68','$path')",$con) or die(mysql_error());
mysql_close($con);

$con2 = mysql_connect('localhost','user2','pass2');
mysql_select_db('dbname2');

$check = mysql_query("select count(*) from tablename2 where userid = '".$_SESSION['userid']."' and datecreated = '$datecreated'",$con2) or die(mysql_error());

参考此

您可以对mysql_connect()进行多次调用,但如果参数相同,则需要为“$new_link”(第四个)参数传递true,否则将重复使用相同的连接。

所以你有

$dbh1 = mysql_connect($hostname, $username, $password); 
$dbh2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);

然后查询数据库1,执行以下操作:

mysql_query('select * from tablename', $dbh1);

和数据库2:

mysql_query('select * from tablename', $dbh2);

或者,如果mysql用户可以访问两个数据库并且它们位于同一主机上(即两个数据库都可以从同一个MySQL连接访问),那么您可以:

  • 保持一个连接处于打开状态并继续调用mysql_select_db()进行交换。我不认为这是一个干净的解决方案,你很容易得到你查询错误的数据库等的情况。
  • 使用您指定数据库名称的查询(例如SELECT * FROM database2.tablename),但这可能很难实现。

另请阅读troelskn关于使用PDO的答案,因为这可能是一种更好的方法。

答案 5 :(得分:0)

问题不在于保存2个数据库,而是在连接配置中。

确保可以访问“differenthost”,并且MySQL端口已打开(通常为3306)。

另外,在PHP 5.5中不推荐使用mysql_connect,我建议改用PDO。