2010-02-13 129 views
0

我写了一个代码在我的网站更新密码加密.. 代码..致命错误

<?php 
$db= mysql_pconnect("localhost","root","root"); 
mysql_select_db("nitconnect"); 
$query="select password from register limit 1000"; 
$result=mysql_query($query); 
$c=0; 
while($ans=mysql_fetch_array($result)) 
{ 
    $newpass=sha1($ans[0].'Q*iV%qKz$&!C'); 
    $newone="update register set password='{$newpass}' where password='{$ans[0]}'"; 
    mysql_query($newone); 
} 
?> 

我如何纠正这一错误?

+0

多少查询,你在做什么?你可以测试'回声'输出来确定超时发生在哪一点?此外,添加mysql错误处理,以便您可以找出脚本是否管理连接到数据库。 www.php.net/mysql_error – 2010-02-13 13:41:54

+0

如果您为更好的可见性格式化代码(使用编辑器中的代码选项)并显示您遇到的错误,可以提供帮助。 “ – 2010-02-13 13:42:29

+0

”在php中致命错误(**执行时间超过60s **)“ – badp 2010-02-13 13:44:12

回答

1

多个设置存在PHP的更高的max_execution_time在php.ini中,但没有实际的解决办法:

MySQL的原生支持SHA1,所以也许你可以做这样的事情

update register set password = sha1(concat(password, 'Q*iV%qKz$&!C')) 

这应该是很多比你的php解决方案更快。

您的查询的表现仍然很低,除非您在一个古老的盒子上。也许你没有为密码字段定义索引?

+0

谢谢..但我的max_execution_time是abt 500secs ..我编辑它..仍然错误显示..任何想法abt的错误? – kgdinesh 2010-02-13 13:47:19

+0

你重新启动了你的网络服务器吗? :) – roman 2010-02-13 13:49:05

+0

烨..顺便说一句,我直接使用urmy命令在phpmyadmin查询..它采取了绝对0.013秒..非常感谢..!哦,我是这样一个n00b .. :( – kgdinesh 2010-02-13 13:52:00

1
<?php 

    $db= mysql_pconnect("localhost","root","root"); 
    mysql_select_db("nitconnect"); 
    $query="UPDATE register SET password = SHA1(CONCAT(password, 'Q*iV%qKz$&!C')) WHERE 1"; 
    $result=mysql_query($query); 

?> 
0

假设MySQL的本地SHA1方法(如罗马建议)不工作,你可以添加以下到您的循环:

set_time_limit(10); 

它基本上将重置PHP超时每次调用该函数,给它需要10秒钟才能完成。

0

您正在选择1000条记录,然后在foreach循环中使用每个值并再次更新数据库,这可能是您超出时间的原因,请尝试通过将其放在脚本之上来延长时间限制:

ini_set('max_execution_time', 14000); // or whatever value 
0

另一种解决方案是以块的形式做记录,然后使用头将自己发送回相同的脚本,传递最后更新记录的索引,然后执行下一个块。

喜欢的东西:

if(issset($_GET['start']) { 
    $start = $_GET['start']; 
} else { 
    $start = 0; 
} 

$query="select password from register limit $start, 50"; 
... do your stuff ... 

$start = $start + 50; 
header("Location: http://www.example.com/yourscript.php?start=$start");