我正在构建一个非常大的查询字符串,(8000个raws,在一百万年中只使用它一次。)我需要删除最后一个逗号,这是在构建字符串时添加的。
看看我的代码,出于某种原因,好像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);
}
答案 0 :(得分:0)
您可以使用此功能substr($query_string,0,-1)
代替rtrim($query_string, ",");
答案 1 :(得分: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);
答案 2 :(得分: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";
}
所以你不需要修剪任何尾随的,
答案 3 :(得分:0)
尽管3年前已经提出这个问题,但我仍然认为回答可能有用。
最近遇到处理70Mb大小字符串的相同问题,对我来说,它是通过临时增加php的设置memory_limit
来解决的。
因此,您可以使用ini_set('memory_limit', '512M')
或更改您的php.ini文件以获得更持久的解决方案。
聚苯乙烯。将memory_limit
设置为-1不会限制php内存使用量,但请谨慎使用。
more on memory_limit: http://php.net/manual/en/ini.core.php#ini.memory-limit