【问题标题】:Cant insert data into second database connection无法将数据插入第二个数据库连接
【发布时间】:2011-11-25 08:26:21
【问题描述】:

看下面的代码,有两个数据库连接。

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

当我在 phpMyAdmin 中手动尝试 SQL 查询时,它工作正常......

$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));
}

【问题讨论】:

  • tbl_name 是否有一个名为fullname 的列?
  • 你确定这是因为连接吗?该列是否存在于新表中?你1000%确定?
  • 你能在连接到 db_new 之后马上试试这个吗? mysql_query("INSERT into menu_new.tbl_name (fullname) values ('1')", $db_new) or die(mysql_error($db_new)); - 为什么你的数据库名称 old_menu 在一个,而 menu_new 在另一个?不是new_menu
  • @Konerak 在 db_new 连接之后确实有效
  • 好的,谢谢,这很有用。所以数据库、表和列实际上存在于 db_new 中!抱歉@Icarus - 我也刚刚赞成这个问题。好奇!

标签: php mysql sql database


【解决方案1】:

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

这意味着您只是在移动此连接中使用的数据库。使用 db 名称作为前缀解决了这个问题,因为如果 MySQL 在同一个 db 服务器上,它允许从同一个 connexion 进行基础间操作。

【讨论】:

  • 这解释了原因。谢谢!
【解决方案2】:

感谢@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));

这真的很奇怪。

【讨论】:

  • 哦——这两个连接实际上 在同一个主机上?是的,“使用数据库新/旧”可能会在那里发生冲突。很好的发现!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
相关资源
最近更新 更多