我正在使用PDO和MySQL。
基本上,每当我尝试插入/更新73个元素或更多元素时,我得到一个" MySQL服务器已经消失了#34;错误。它发生在各种不同的脚本上,做着截然不同的事情。
以下是我使用的代码的示例
try
{
$bdd = new PDO('mysql:host=mysql.hostinger.fr;dbname=XXXX', 'XXXX', 'XXXX');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$prepare = 'UPDATE table SET field = ? WHERE id = ?';
$update = $bbd->prepare($prepare);
foreach ($elements as $el){
$update->execute(array($el['value'], $el['id']));
echo 'error code : <br />';
var_dump($update->errorCode());
echo '<br />error info : <br />';
var_dump($update->errorInfo());
}
如果$ elements有超过73个元素,则数据库不会更新,我会为每个$ el获得以下内容:
error code :
string(5) "HY000"
error info :
array(3) { [0]=> string(5) "HY000" [1]=> int(2006) [2]=> string(26) "MySQL server has gone away" }
根据我的测试,它只是修改了创建错误的元素数量。 (而不是诸如以下内容:查询的长度,更新元素的大小,以及每个元素更新的字段数)。此外,值得注意的是,如果是73个查询每个更新1个元素(例如上面的代码),或者更新73个元素的一个查询,则无关紧要:错误以任何一种方式弹出。
我知道问题可能是因为服务器超时,但修改了72个元素似乎非常小。我为我的托管公司开了一张票,我正在等待回复,但也许有人在这里可能会有任何后见之明。
提前致谢。
注意:我在连接数据库之前尝试了以下内容,但它没有做任何事情:
ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300);
其他信息:使用phpMyAdmin时,即使对于大于73个元素的请求也没有问题。
答案 0 :(得分:0)
如果您完全控制MySQL服务器,则应尝试更改my.cnf文件并重新启动它。
[mysqld]
max_allowed_packet=16M