Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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 更新停止于768条记录_Php_Mysql - Fatal编程技术网

Php 更新停止于768条记录

Php 更新停止于768条记录,php,mysql,Php,Mysql,我运行的这个脚本是为了更新一个表,我遇到的问题是,在运行更新的过程中,它只是停止更新第768行的表 为什么会发生这种情况 脚本1被称为doAllocate.php,如下所示: <?php $status=trim($_GET['status']); $region=$_GET['regg']; include_once ('connstring.php'); $dir=1; $query ; $flag="unattended"; $cids=array(); $acc=array();

我运行的这个脚本是为了更新一个表,我遇到的问题是,在运行更新的过程中,它只是停止更新第768行的表

为什么会发生这种情况

脚本1被称为
doAllocate.php
,如下所示:

<?php
$status=trim($_GET['status']);
$region=$_GET['regg'];
include_once ('connstring.php');

$dir=1;
$query ;
$flag="unattended";
$cids=array();
$acc=array();
$c=0;
$a=0;
$var="";
$q="";
$p;     

$dbhandle = mysql_connect($hostname, $username, $password)
or die("<script> alert('Unable to connect to MySQL'); </script>");

$selected = mysql_select_db("edgars",$dbhandle)
or die("<script> alert('Could not select database'); </script>");

$query1="SELECT * 
           FROM collectors 
          WHERE status='$status' AND 
                region='$region' ";
//$query1="SELECT * FROM collectors where status='1' and region='1' ";
$res1=mysql_query($query1);
$i=0;
while($r=mysql_fetch_array($res1))
{
    $cids[$i]=$r['cid'];
    $i++;
}

$query="SELECT * 
          FROM customers  
         WHERE status='$status' AND 
               flag='$flag' AND 
               region='$region' AND 
               cid='' 
      ORDER BY total_due DESC";
//$query="SELECT * FROM customers  where status='1' and flag='$flag' and region='1' ORDER BY total_due DESC";

$res=mysql_query($query);
$num=mysql_num_rows($res);
$j=0;

while($row = mysql_fetch_array($res))
{
    $acc[$j]=$row['account'];
    $j++;
}

for($c=0,$a=0 ; $c<count($cids),$a<count($acc);$c++,$a++)   
{
    $q= mysql_query("UPDATE customers 
                        SET cid='$cids[$c]' 
                      WHERE account='$acc[$a]' AND 
                            cid=''");
    $rcount = mysql_affected_rows();
    if($rcount > 0)
    {
        header("Location: doAllocateRev.php?status=".$status."&regg=".$region);
    }
}
?>
<?php
$status=trim($_GET['status']);
$region=$_GET['regg'];
include_once ('connstring.php');

$dir=1;
$query ;
$flag="unattended";
$cids=array();
$acc=array();
$c=0;
$a=0;
$var="";
$q="";
$p;     

$dbhandle = mysql_connect($hostname, $username, $password)
or die("<script> alert('Unable to connect to MySQL'); </script>");

$selected = mysql_select_db("edgars",$dbhandle)
or die("<script> alert('Could not select database'); </script>");

$query1="SELECT * 
           FROM collectors 
          WHERE status='$status' AND 
                region='$region' ";
//$query1="SELECT * FROM collectors  where status='1' and region='1' ";
$res1=mysql_query($query1);
$i=0;
while($r=mysql_fetch_array($res1))
{
    $cids[$i]=$r['cid'];
    $i++;
}

$query="SELECT * 
          FROM customers  
         WHERE status='$status' AND 
               flag='$flag' AND 
               region='$region' AND 
               cid='' 
      ORDER BY total_due DESC";
//$query="SELECT * FROM customers  where status='1' and flag='$flag' and region='1' ORDER BY total_due DESC";

$res=mysql_query($query);
$num=mysql_num_rows($res);
$j=0;

while($row = mysql_fetch_array($res))
{
    $acc[$j]=$row['account'];
    $j++;
}

for( $c=count($cids)-1; $c>=0,$a<count($acc) ; $c--,$a++)   
{
    $p= mysql_query("UPDATE customers 
                        SET cid='$cids[$c]'
                      WHERE account='$acc[$a]' AND
                            cid=''");
    $rcount = mysql_affected_rows();
    if($rcount > 0) 
    {
        header("Location: doAllocate.php?status=".$status."&regg=".$region);
    }
}
?>

我不能确切地告诉您要将什么放入数据库,但我知道当您尝试将长度超过767的键写入innoDb表时,mysql可能会产生错误。请参阅(“默认情况下,单列索引的索引键最多可为767字节”)。事实上,你达到了768点的极限,这让我怀疑这是相关的。如果这是巧合,那就很有趣。

这里有两点可能会有所帮助

$p= mysql_query("UPDATE customers 
                    SET cid='$cids[$c]'
                  WHERE account='$acc[$a]' AND
                        cid=''");
避免这种情况。正确连接变量:

$p= mysql_query("UPDATE customers 
                    SET cid='" . $cids[$c] . "'
                  WHERE account='" . $acc[$a] . "' AND
                        cid=''");
我最近遇到了一个类似的问题:

这可能是由于
max\u input\u vars
变量引起的


共享
ini_get('max_input_vars')的输出并考虑提高它。

可能是因为数据库存储的限制。检查my.ini文件。
永远不会在
标题下完全运行,每次成功更新都会将受影响的行触发为1,因此它会在您结束整个代码之前尝试重定向您。1)
mysql
不推荐使用,请停止使用
mysqli
PDO
是您应该使用的。2) 您使用从
选择中提取的值来让PHP执行
更新
,相反,最好直接将查询重写为
更新
——以防止PHP超时3)您的代码可能超时,从而阻止更新完成。