0

非常に大きなクエリ文字列を作成しています (8000 raw、100 万年に 1 回しか使用しません)。文字列の作成中に追加される最後のコンマを削除する必要があります。

私のコードを見てください。何らかの理由で、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

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

これは 3 年前に尋ねられたものですが、回答するのが役立つと思います。

最近、70Mb サイズの文字列を処理する際に同じ問題に遭遇しましたが、私にとっては一時的に php の ini 設定を増やすことで解決されましたmemory_limit

そのため、php.ini ファイルを使用ini_set('memory_limit', '512M')または変更して、より恒久的な解決策を得ることができます。

Ps。-1 に設定memory_limitしても PHP のメモリ使用量は制限されませんが、注意して使用してください。

memory_limit の詳細: http://php.net/manual/en/ini.core.php#ini.memory-limit

于 2016-11-03T09:55:18.383 に答える
0
foreach($this->sites_array as $key => $value)
{
    $query_string .= "('".$key."','".$value."'), \n";
}

rtrim($query_string, ",");

rtrim の 2 番目のパラメーターは、文字列の末尾から削除する文字のリストです。ただし、生成している文字列は常に で終了し, \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 に答える