2011-09-26 130 views
3

请参阅下面的代码,有两个数据库连接。无法将数据插入到第二个数据库连接

首先,它得到第一个连接的数据,然后插入到第二个数据库连接,但它不会插入 - 我可以一个错误说Unknown column 'fullname' in 'field list'

当我试图SQL查询在phpMyAdmin手动,它做工精细...

$db_new = mysql_connect('localhost', 'root', 'password'); 
if (!mysql_select_db("menu_new", $db_new)) { 
    die("Cant connect menu_new DATABASE"); 
} 

$db_old = mysql_connect('localhost', 'root', 'password'); 
if (!mysql_select_db("old_menu", $db_old)) { 
    die("Cant connect old_menu DATABASE"); 
} 

$SQL_old = "SELECT * FROM old_table"; 
$q = mysql_query($SQL_old, $db_old); 

while ($row = mysql_fetch_assoc($q)) { 
    $name = $row['name']; 

    $SQL = "INSERT INTO tbl_name (fullname) values ('$name')"; 

    //Problem Here - It wont insert into second database 
    mysql_query($SQL, $db_new) or die(mysql_error($db_new)); 
} 
+1

确表'tbl_name'是否有名为'fullname'的列? –

+1

你确定这是因为连接吗?该列是否存在于新表中?你有1000%的把握吗? –

+0

我是100%肯定的......这与连接有关。 –

回答

1

谢谢@Konerak的建议,并确实工作!

要从数据库连接插入/选择数据,您必须在表名之前包含数据库名称。

对于实例

来源:

mysql_query("INSERT into tbl_name (fullname) values ('1')", $db_new) or die(mysql_error($db_new)); 

要:

mysql_query("INSERT into menu_new.tbl_name (fullname) values ('1')", $db_new) or die(mysql_error($db_new)); 

这是非常奇怪的,但。

+0

哦 - 两个连接实际上*在同一个主机**上?是的,“使用数据库新/旧”可能与此冲突。好找! – Konerak

2

这种行为没有什么奇怪的。只需在您的mysql_connect调用中添加$ link参数,并将其设置为true即可。默认情况下,它是假的,这意味着重复使用相同参数的这个函数,这就是你正在做的db名称不在你的mysql连接上,将重复使用现有的连接使用相同的参数。所以你有两个变量,但只有一个连接。

这意味着你只是移动在这个连接中使用的数据库。使用db名称前缀可以解决问题,因为如果MySQL位于同一个数据库服务器上,它允许来自同一连接的基础间操作。

+0

这就解释了为什么。谢谢! – Konerak