我目前正在运行一个自定义php脚本,当在本地主机上运行时,这个脚本可以正常运行,但是在共享主机上运行时,我会收到以下错误:
致命错误:未命名的异常'PDOException‘与消息'SQLSTATEHY000: General error: 2006 MySQL服务器在.205堆栈跟踪: 0.PDO->准备(‘SELECT* FROM o.’) #1 {main}抛入.线路205
(我已将文件路径替换为.)
我尝试过的事情:
PDO::ATTR_TIMEOUT => "999999999999999999999",以扩展任何超时。max_allowed_packet (我找到的每一个答复都说这是原因),我的本地机器目前被设置为1048576 (1mb),但是我的主机当前被设置为268435456 (268 My )。我会理解,如果我的本地机器是268兆b,我的主机是1mb,但这是没有任何意义的,这是问题的原因,因为事实并非如此。
我确实试图在我的主机上增加它,但是作为它的共享,我没有权限来更改这个全局变量。
还有其他我可以尝试的想法吗?
FYI这里是脚本:
//MYSQL PREPARE STATEMENTS
//check to see if a product is in database
$mysql['productcheck'] = $mysql['pdo']->prepare('SELECT * FROM oc_product WHERE sku = ?');
$newproductcount=0;
$x = 0;
while(($maintable[$x]['status']=="active") || ($maintable[$x]['status']=="new") || ($maintable[$x]['status']=="discontinued") || ($maintable[$x]['status']=="archive")) {
if(($maintable[$x]['status']=="active") || ($maintable[$x]['status']=="new")){
//check to see if product exsists
$params[1]=$maintable[$x]['euid'];
$mysql['productcheck']->execute([$params[1]]);
if($mysql['productcheck']->rowCount()==0){
//PRODUCT DOESN'T EXSIST
echo "Product doesnt exsists!";
$newproductcount++;
}
}
$x++;
}发布于 2016-12-14 01:02:45
导致MySQL服务器消失的其他一些常见原因是:
检查此链接:远去
发布于 2022-06-22 05:41:43
我认为您的代码中的问题是,您执行,为变量、$maintable、中的每个值选择,而您的代码在中执行中的查询。服务器可能无法处理代码发送的查询,因此,在执行 SELECT 查询的过程中,另一个查询将到达正在执行当前查询的同一个数据库连接,这使得您的新查询等待连接完成选择过程,但是MySQL不会执行新的查询,因为它不会重新连接/重新查询新的查询。
我的建议是您应该更改您的查询。不要使用SELECT * FROM oc_product WHERE sku = ?,您应该使用SELECT * FROM oc_product WHERE sku IN ?,这样单个连接就可以搜索任何您想要的变量,然后在查询完成后进行验证。
所以这段代码
while(($maintable[$x]['status']=="active") || ($maintable[$x]['status']=="new") || ($maintable[$x]['status']=="discontinued") || ($maintable[$x]['status']=="archive")) {
if(($maintable[$x]['status']=="active") || ($maintable[$x]['status']=="new")){
//check to see if product exsists
$params[1]=$maintable[$x]['euid'];
$mysql['productcheck']->execute([$params[1]]);
if($mysql['productcheck']->rowCount()==0){
//PRODUCT DOESN'T EXSIST
echo "Product doesnt exsists!";
$newproductcount++;
}
}
$x++;
}不应执行查询,而应验证从新查询中获得的查询结果。
https://stackoverflow.com/questions/41133030
复制相似问题