【问题标题】:Updating remote database table from local database table从本地数据库表更新远程数据库表
【发布时间】:2012-09-16 06:55:37
【问题描述】:

我想从本地数据库更新远程数据库,我已经编写了 php 脚本来执行此操作,但它显示了致命错误。

远程数据库和本地数据库同名,同表,同字段。

我试过这种方法,但它不起作用。

    $tablename="pc_games";
    $database = 'games';

    $local_query = "SELECT * FROM $tablename LIMIT 100 OFFSET $remoterows";
    $local_result = mysql_query($local_query, $connection) or trigger_error("SQL", E_USER_ERROR);

    while($list=mysql_fetch_array($local_result))
    {
    $remote_update=mysql_query("INSERT INTO $tablename SETLECT * from $tablename");
    $remote_update_result = mysql_query($remote_update, $remote_connection) or trigger_error("SQL", E_USER_ERROR);
    }

请查看并建议任何可能的方法来做到这一点。

【问题讨论】:

  • 你能告诉我们错误吗?另外,您确定远程连接定义正确吗?
  • 致命错误:SQL,就是这样。是的,连接正常,没有问题。
  • 为您的错误处理程序试试这个:` or die (mysql_error());`,然后告诉我们结果。
  • 将 trigger_error("SQL", E_USER_ERROR); 更改为 die( mysql_error() );
  • 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“SETLECT * from pc_games”附近使用正确的语法

标签: php mysql


【解决方案1】:
"INSERT INTO $tablename SETLECT * from $tablename"

这是一个无效的 SQL 语句。 SETLECT 必须是 SELECT

【讨论】:

  • 我打错了,现在显示Duplicate entry '1' for key 'PRIMARY'
  • 您有一个唯一约束,并且您试图多次插入同一记录,这违反了唯一约束。删除现有行或插入具有不同主键值的新行。
【解决方案2】:

您的远程查询存在语法错误:"INSERT INTO $tablename SETLECT * from $tablename"。你的意思是SELECT 而不是SETLECT。

【讨论】:

    【解决方案3】:

    替换代码:

    $tablename="pc_games";
    $database = 'games';
    
    $local_query = "SELECT * FROM $tablename LIMIT 100 OFFSET $remoterows";
    $local_result = mysql_query($local_query, $connection) or die(mysql_error());
    
    while($list=mysql_fetch_array($local_result))
    {
    $remote_update=mysql_query("INSERT INTO $tablename SELECT * from $tablename");
    $remote_update_result = mysql_query($remote_update, $remote_connection) or die (mysql_error());
    }
    

    你做错了什么,是你打错了这一行:

    $remote_update=mysql_query("INSERT INTO $tablename SETLECT * from $tablename");
    

    请注意,您使用了SETLECT,而不是您想要使用的(也许):SELECT。

    我还惊叹检测打字错误需要多长时间。

    我将您所有的错误处理程序都更改为我在 cmets 中提到的那些。将来使用它们。他们更好。

    更新:你对你的代码做了什么?我刚刚意识到一些激烈的事情:

    $remote_update=mysql_query("INSERT INTO $tablename SELECT * from $tablename");
    $remote_update_result = mysql_query($remote_update, $remote_connection) or die (mysql_error());
    

    首先,您在结果上运行mysql_query。其次,你没有插入任何东西INSERT INTO $tablename。是我的错,还是你做错了什么?

    【讨论】:

    • 是的,你是对的,现在没有错误显示,远程数据库中没有插入任何内容,我该怎么办。
    • @TallboY 那么您将插入代码更改为什么?我可以看看吗?
    • 我又问了一个问题,请看,stackoverflow.com/questions/12445909/…
    【解决方案4】:
    1. 当您绝对不需要结果时,为什么要循环查看结果(使用while($list=mysql_fetch_array($local_result)) )?

    2. 为什么到处都设置错误函数为:trigger_error("SQL", E_USER_ERROR);。

    3. 为什么你还在使用mysql_* 方法来处理数据库?

    4. 如果只需要插入另一个表中的数据,就放:


    mysql_query("INSERT INTO $tablename SELECT * FROM $tablename LIMIT 100 OFFSET $remoterows") or die(mysql_error());
    

    并完成它。

    【讨论】:

    • 我想在添加新行时从本地数据库更新远程数据库,抱歉我没有提到。
    • 用这种方法显示Duplicate entry '34' for key 'PRIMARY',我在远程数据库中只有33行,我刚刚在本地数据库中插入了一个新行,那么为什么会出现这个错误
    • 不能肯定。你的$remoterows 设置为 33 了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 2011-10-17
    • 2021-08-09
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多