我必须执行一个PHP代码只是一次,使我的数据库有更好的表一些变化。代码太繁重,向数据库发送了超过190000个查询(包括选择和插入)。
现在的问题是,当我在浏览器上执行它时,在数据库和我设置为echo的单词上形成结果来检查它是否以正确的方式进行,我可以发现它被部分执行。页面上没有出现错误/警告/通知。
我将最大执行时间和所有相关设置设置为1小时,但它只需要30分钟,并且立即停止for循环。
这是我的一部分代码的示例:
for ($i=9;$i<=19909; $i++){
$j=0;
$select= "select synonym from synonym where x_=". $i ."";
//echo $select;
//echo "</br>";
$select_result= mysqli_query($connection,$select);
if (mysqli_num_rows($select_result)>0) {
$row = mysqli_fetch_assoc($select_result);
$arra = explode("،",$row["synonym"]);
}
while ($arra[$j]){
$text=trim($arra[$j]);
$search="select word from semiresult where word='". $text ."'";
$search_result= mysqli_query($connection,$search);
if (mysqli_num_rows($search_result)==0) {
$insert="insert into semiresult (x, word, synonym) values ('','". $text."','".$syn."')";
}elseif (mysqli_num_rows($search_result)>0){
$repeat="UPDATE semiresult SET synonym=CONCAT(synonym,'".$syn2."') where word like'".$arra[$j]."'";
$repeat_result=mysqli_query($connection,$repeat) or die ('request "Could not execute SQL query" '.$repeat);
}
通过工作,您可以避免在php中执行这些操作。是否值得取决于数据和表的声明。
例如,假设word在半结果表中有一个唯一的索引,同义词字段最多有1000个分隔字段,您可以这样做(未经测试):-INSERT INTO semiresult (x, word, synonym)
SELECT '',
'". $text."',
SUBSRTING_INDEX(SUBSRTING_INDEX(t1.synonym, '،', (hundreds.aCnt * 100 + tens.aCnt * 10 + units.aCnt + 1)), '،', -1)
FROM synonym t1
CROSS JOIN
(
SELECT 0 aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) AS units
CROSS JOIN
(
SELECT 0 aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) AS tens
CROSS JOIN
(
SELECT 0 aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) AS hundreds
WHERE t1.x_ BETWEEN 9 AND 19909
AND LENGTH(t1.synonym) - LENGTH(REPLACE(t1.synonym, '،', '')) > (hundreds.aCnt * 100 + tens.aCnt * 10 + units.aCnt)
ON DUPLICATE KEY UPDATE synonym=CONCAT(synonym, VALUES(synonym))
毕竟我解决了!!
在php设置中将时间限制(如最大执行时间和任何其他时间限制)更改为两个小时后,我在代码的开头添加了这行代码,然后它执行直到代码结束。
set_time_limit(0);
这段代码计划只执行一次,否则我没有做这些更改。