0

我正在构建一个非常大的查询字符串(8000 个原始数据,一百万年只使用一次。)我需要去掉最后的逗号,它是在构建字符串时添加的。

看看我的代码,出于某种原因,它好像rtrim()什么也没做;传入的字符串rtrim()完全原封不动地返回。

(如果您需要 query_string 值的副本,请告诉我,我也会上传。)

public function sync_sites_table()
{

    # $query_string = "TRUNCATE TABLE " . self::$table_name;
    # $db->query($query_string);

    $this->build_sites_object();

    $query_string = "INSERT INTO `".self::$table_name . "` (`site_id`, `site_name`) VALUES \n";

    foreach($this->sites_array as $key => $value)
    {
        $query_string .= "('".$key."','".$value."'), \n";
    }

    rtrim($query_string, ",");

    global $db;
    $db->query($query_string);

}
4

4 回答 4

0
foreach($this->sites_array as $key => $value)
{
    $query_string .= "('".$key."','".$value."'), \n";
}

rtrim($query_string, ",");

rtrim 的第二个参数是要从字符串末尾剥离的字符列表。但是您生成的字符串将始终以结尾, \n- 没有尾随逗号。你可以试试:

rtrim($query_string, ", \n");

哪个应该起作用;但这样做可能更优雅:

$params = array();

foreach($this->sites_array as $key => $value)
{
    $params[] = "('".$key."','".$value."')";
}

$query_string .= implode (",", $params);
于 2013-07-18T14:04:13.437 回答
0

rtrim() 不是通过引用传递的;它返回您需要分配给变量的修剪值:

$query_string = rtrim($query_string, ",");

但更清晰的答案可能是:

$first = true;
foreach($this->sites_array as $key => $value)
{
    if (!$first) { $query_string .= ', '; } else { $first = false; }
    $query_string .= "('".$key."','".$value."') \n";
}

所以你不需要修剪任何尾随,

于 2013-07-18T14:23:05.967 回答
0

您可以使用此功能substr($query_string,0,-1)代替rtrim($query_string, ",");

于 2013-07-18T14:02:22.943 回答
0

尽管这已在 3 年前提出,但我仍然认为回答可能有用。

最近在处理 70Mb 大小的字符串时遇到了同样的问题,对我来说,它是通过临时增加 php 的 ini 设置来解决的memory_limit

因此,您可以使用ini_set('memory_limit', '512M')或更改您的 php.ini 文件以获得更永久的解决方案。

附言。设置memory_limit为 -1 不会限制 php 内存使用,但请谨慎使用。

有关 memory_limit 的更多信息:http: //php.net/manual/en/ini.core.php#ini.memory-limit

于 2016-11-03T09:55:18.383 回答