データベースでバッチ置換を実行して、イギリス語をアメリカ語に翻訳しようとしています。置換する単語の配列と、実行するさまざまなテーブルの配列があります。必要なものを正確に提供しているように見える次のスレッドに出くわしましたが、試してみるとエラーが発生します。
これは私が遭遇しているエラーです。
Exception caught: exception 'PDOException' with message
'SQLSTATE[HY000]: General error: 1436 Thread stack overrun:
10816 bytes used of a 131072 byte stack, and 128000 bytes needed.
Use 'mysqld -O thread_stack=#' to specify a bigger stack.' in /var/.../....php:303
Stack trace: #0 /var/.../....php(303): PDOStatement->execute(Array) #1 {main}
この回答では、カスタム定義の MySQL 関数を使用して、次のようなクエリを生成しています。
UPDATE field_data_body SET body_value = case_insensitive_replace(body_value, :british, :american)
私は以下を使用して PDO を処理しています。
$query = $db->prepare($sql);
try {
$query->execute($sql_fields_array);
} catch (PDOException $e) {
echo "Exception caught: $e";
}
配列は次の$sql_fields_array
ようになります。
Array ( [british] => acclimatise [american] => acclimate )
カスタム関数の名前を変更して正しく作成したことを確認したところ、関数名が存在しないというエラーが発生しました。したがって、少なくとも私が試したことのその部分は正しいです。
もともと私は を使用しreplace(lower(body_value), :british, :american)
て検索と置換を行っていましたが、これによりすべてが小文字に変更されましたが、これは私が望んでいるものではありません。
このエラーに関するアイデアはありますか? または、実際にこのバッチ検索と置換を自動化できるより良い方法がある場合。