有效地发送/接收MySQL行?

时间:2013-12-19 01:22:46

标签: php mysql vb.net performance post

我有一个VB .Net应用程序,它通过PHP POST方法接收/发送数据,以使用HTTPWebRequest从MySQL数据库更新/获取行。我的主机不允许远程数据库访问,所以我认为这是我可以这样做的唯一方法..但我该如何有效地做到这一点?

我担心我的方法很可能非常低效。

对于发送数据,我目前正在做的是添加要发送到字符串的所有数据,如:

&colA=valA1;valA2;valA3&colB=valB1;valB2;valB3 etc...

该字符串每隔X分钟通过HTTPWebRequest发送到PHP文件,然后PHP文件将行拆分为数组(第0行= valA1,valB1),以在for循环中使用sql查询添加/更新数据库。 / p>

然后,为了检索数据,我正在做类似的事情 - 从数据库中获取所有行,并将字符串拆分为“;”。我的.Net应用程序读取字符串并将其拆分,并将行添加到数组中。只有在启动应用程序时才会检索数据。

有更有效的方法吗?发送多个POST请求或包含所有行的POST请求更好吗?我应该限制一次发送的行数吗? (大约有1000行,每行大约20列)


编辑:

if($_POST['action'] == "queryGroup" && $_POST['group'] != ""){
    $result = DB::getInstance()->query("SELECT forename, surname, dob FROM accounts WHERE group='".$_POST['group']."'");
    $output = "";
    foreach($result as $row){
        $output .= $row['forename'].";".$row['surname'].";".$row['dob']."|";
    }
    echo(substr($output, 0, -1)); //Remove the last instance of '|'
}

所以在VB .Net应用程序中,我会拆分'|'制作一系列个人账户。

然后拆分';'获取每个帐户的名字/姓氏/ dob。

还有其他更可变的行 - 如状态检查(在线/离线)和最后一次活动的计时器等,可以从VB .Net应用程序添加新用户..这就是更新行的原因时不时地。

我有一个用于制作WebRequest,WebResponse和StreamReader对象的类,用于:

Dim post As New POST
With post
    .URL = "http://www.host.com/post.php"
    .Data = "action=queryGroup&group=" & Group
    .Connect() 'Sends the WebRequest

    Lst(.Response) 'Gets the WebResponse and adds it to a StreamReader and sends to Lst function
End With

Private Sub Lst(ByVal response As String)
    Dim accounts As String() = Nothing
    accounts = response.Split(CChar("|"))

    For i = 0 To accounts.Count - 1
        Dim arr As String() = accounts(i).Split(CChar(";"))
        arrAdd(arr(0), arr(1), arr(2)) 'arrAdd puts all the data into a ListView
    Next
End Sub

然后发送数据..这是相同的事情,但相反。

1 个答案:

答案 0 :(得分:0)

如果您只允许连接端口80(或更好的端口443),我认为这确实是要走的路。至于问题,你可能想检查你的php.ini post_max_size,这是一个帖子允许的最大上传大小。至于脚本处理,请查看set_time_limit,即脚本执行的最长时间。除此之外,还有关于脚本处理事件的方式。

如果您的主机允许SOCKS,您还可以设置代理服务器并以这种方式直接连接到您的数据库。有关SOCKS 5包装器,请参阅http://www.phpclasses.org/package/1822-PHP-TCP-connection-wrapper-using-SOCKS-5-protocol.html。我从来没有用过它,但你可能想看看它。