Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php请求mysql查询超时_Php_Mysql - Fatal编程技术网

php请求mysql查询超时

php请求mysql查询超时,php,mysql,Php,Mysql,我正在尝试进行长时间的mysql查询和处理,并更新创建的行: $query = 'SELECT tvshows.id_show, tvshows.actors FROM tvshows where tvshows.actors is not NULL'; $result = mysql_query($query); $total = mysql_num_rows($result); echo $total; while ($db_row = mysql_fetch_assoc($result

我正在尝试进行长时间的mysql查询和处理,并更新创建的行:

$query = 'SELECT tvshows.id_show, tvshows.actors FROM tvshows where tvshows.actors is not NULL';
$result = mysql_query($query);

$total = mysql_num_rows($result);
echo $total;

while ($db_row = mysql_fetch_assoc($result)) 
{
//process row
}
但在60秒后,如果给我一个超时请求,我会尝试在php代码中插入以下内容:

set_time_limit(400);
但都一样,我怎么办

编辑: 仅查询:

 $query = 'SELECT tvshows.id_show, tvshows.actors FROM tvshows where tvshows.actors is not NULL';
执行需要2-3秒,所以我认为问题在于在php中迭代所有结果以插入到行或更新它,所以我认为问题在于php,如何更改超时

编辑

这是完整的代码,我认为代码中没有问题

$query = 'SELECT tvshows.id_show, tvshows.actors FROM tvshows where tvshows.actors is not NULL';
$result = mysql_query($query);

$total = mysql_num_rows($result);
echo $total;

while ($db_row = mysql_fetch_assoc($result)) {
   //print $db_row['id_show']."-".$db_row['actors']."<BR>";
   $explode = explode("|", $db_row['actors']);

   foreach ($explode as $value) {
      if ($value != "") {

         $checkactor = mysql_query(sprintf("SELECT id_actor,name FROM actors WHERE name = '%s'",mysql_real_escape_string($value))) or die(mysql_error());

         if (mysql_num_rows($checkactor) != 0) {
            $actorrow = mysql_fetch_row($checkactor);
            $checkrole = mysql_query(sprintf("SELECT id_show,id_actor FROM actor_role WHERE id_show = %d AND id_actor = %d",$db_row['id_show'],$actorrow[0])) or die(mysql_error());

                if (mysql_num_rows($checkrole) == 0) {
               $insertactorrole = mysql_query(sprintf("INSERT INTO actor_role (id_show, id_actor) VALUES (%d, %d)",$db_row['id_show'],$actorrow[0])) or die(mysql_error());
            }

         } else {
            $insertactor = mysql_query(sprintf("INSERT INTO actors (name) VALUES ('%s')",mysql_real_escape_string($value))) or die(mysql_error());
            $insertactorrole = mysql_query(sprintf("INSERT INTO actor_role (id_show, id_actor, role) VALUES (%d, %d,'')",$db_row['id_show'],mysql_insert_id())) or die(mysql_error());

         }
      }
   }
}
$query='SELECT tvshows.id_show,tvshows.actors FROM tvshows,其中tvshows.actors不为空';
$result=mysql\u query($query);
$total=mysql\u num\u行($result);
echo$总计;
而($db\u row=mysql\u fetch\u assoc($result)){
//打印$db_行['id_show']。“-”$db_行['actors']。“
”; $explode=explode(“|”,$db_行['actors'); foreach($explode as$value){ 如果($value!=“”){ $checkactor=mysql\u query(sprintf(“选择id\u actor,从actors中选择name='%s',mysql\u real\u escape\u string($value)))或die(mysql\u error()); if(mysql\u num\u行($checkactor)!=0){ $actorrow=mysql\u fetch\u行($checkactor); $checkrole=mysql\u查询(sprintf(“从参与者角色中选择id\u show、id\u actor,其中id\u show=%d和id\u actor=%d)”、$db\u行['id\u show']、$actorrow[0])或死亡(mysql\u error()); if(mysql_num_rows($checkrole)==0){ $insertactorrole=mysql\u查询(sprintf(“插入到参与者角色(id\u show,id\u actor)值(%d,%d)”,$db\u行['id\u show'],$actorrow[0]))或die(mysql\u error()); } }否则{ $insertactor=mysql\u query(sprintf(“插入到actors(名称)值('%s')”),mysql\u real\u escape\u string($value)))或die(mysql\u error()); $insertactorrole=mysql\u query(sprintf(“插入到参与者角色(id\u show,id\u actor,role))值(%d,%d,)”、$db\u行['id\u show']、mysql\u INSERT\u id())或die(mysql\u error()); } } } }
绝对应该尝试@rid建议的方法,在服务器上执行查询并查看调试结果/持续时间-如果查询不是简单的查询,请像在PHP脚本中一样构造它,只回显SQL命令,而不必执行它,只需将其复制到服务器MySQL命令行或您使用的任何工具

如果您有shell访问权限,请在再次运行上述脚本后使用该命令,并查看MySQL demon服务器是否正在增加资源,以确定这是否真的是原因

您是否可以尝试使用更简单的查询来代替较长的查询?就像一个简单的
从电视节目中选择count(*),看看返回值是否也需要很长时间


希望这些建议对您有所帮助。

您的代码有很多问题

  • 不要在一列中存储多个值。您的
    actors
    列是以管道分隔的文本。这是一个大禁忌
  • 使用联接而不是其他查询。您可以(或者,如果以上不正确的话)在一个查询中获得所有这些数据
  • 所有代码都可以在服务器上的单个查询中完成。在我看来,它不接受用户的输入,也不产生输出。它只是更新一个表。为什么要在PHP中这样做?了解
    插入…选择…
以下是一些帮助您入门的资源(来自谷歌,但希望它们足够好):


如果您还有其他问题,请告诉我。

如果在MySQL服务器上执行查询需要多长时间,它会返回多少条记录?我没有尝试过,因为这不是一个简单的查询,我必须在php中分解一些字符串并将其插入数据库,我不知道在MySQL服务器中是否可行……嗯,如果执行查询需要一分钟的时间,那么您就有一个需要在数据库服务器上解决的问题,并且您不能从PHP中做很多事情。另一方面,如果查询执行速度很快,那么问题可能是PHP中正在进行的处理。因此,在调试之前,首先找出问题的确切位置是很重要的,否则您只是在猜测。在新代码中。它们不再得到维护。看到了吗?相反,请了解,并使用or-将帮助您决定哪一个。@Piero,如果这是一个PHP问题,那么您需要找到该
//进程行
代码的哪一部分正在减慢速度。根据您的提示,听起来您也在那里执行一些
INSERT
s操作,如果您正在为每行执行
INSERT
,那么这可能是问题之一。但是除非你发布你正在做的事情,否则我不确定你能得到多少帮助…感谢我尝试过的答案,我的sql查询需要3秒钟…行的处理也需要时间…所以我认为这是php的问题…谢谢你的回答,我可以在mysql中调用explode()。@Piero:不,你不需要这样做。这就是规范化的要点,不使用多值列。如果您有任意数量的值,请将它们存储在一组行中,而不是存储在列中的单个值中。