【发布时间】:2014-07-11 09:26:25
【问题描述】:
我正在运行的这个脚本是更新一个表,我遇到的问题是在运行更新的过程中,它只是在第 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."®g=".$region);
}
}
?>
Scripts 2 被称为doAllocateRev.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=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."®g=".$region);
}
}
?>
【问题讨论】:
-
可能是因为数据库存储的限制。检查 my.ini 文件..
-
您的
for将永远不会在其中包含header的情况下完全运行,每次成功更新都会将受影响的行触发为1,因此它会在您结束整个代码之前尝试重定向您. -
1)
mysql已弃用,停止使用!mysqli或PDO是您应该使用的。 2)您使用从SELECT中提取的值来让PHP 执行UPDATE,而不是将查询直接重写为UPDATE可能会更好——以防止PHP 超时3)您的代码可能超时,阻止更新完成。