我正在使用PDO和MySQL。
基本上,每次我尝试插入/更新73个或更多的元素,我得到一个"MySQL服务器已经走了"的错误。它发生在各种不同的脚本中,做着非常不同的事情。
下面是我使用
的代码示例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个元素。
如果你对MySQL服务器有完全的控制权,你应该尝试改变my.cnf文件,然后重新启动它。
[mysqld]
max_allowed_packet=16M