不区分大小写的自定义replace()函数

时间:2013-10-02 10:06:11

标签: php mysql pdo replace user-defined-functions

我正在尝试对数据库进行批量替换,以翻译英国语到美国单词。我有一大堆要替换的单词,还有一系列各种不同的表来运行。我遇到的following thread似乎提供了我需要的内容,但是在尝试时我遇到了错误。

这是我遇到的错误。

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}

我在this answer中使用自定义的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)进行搜索和替换,但是然后将所有内容更改为小写,这不是我想要的。

有这个错误的任何想法?或者,如果有更好的方法,我可以自动执行批量搜索和替换。

2 个答案:

答案 0 :(得分:1)

似乎是MySQL error 1436: Thread stack overrun, with simple query的副本。

由于没有评论权,因此将其发布在此处。

此致

答案 1 :(得分:0)

查询似乎工作正常。将线程堆栈从128K提升到256K后,查询成功执行。你花了20-30秒的时间关注你,但是并非如此。

增加此限制后,我没有发现任何对服务器的负面影响。