这实际上是我的第一个代码。我试图在我的Wordpress网站上添加新帖子。
Mysql查询将返回4035行,其中包含插入新帖子的所有详细信息。
问题:循环永远不会停止! 它将达到4035行,然后从第1行开始遍布
我试图让它停止的事情:
if ($loopstimes > 4400) {break;}
奇怪的部分:
LIMIT 900
时,一切正常完美。当添加900帖子时,循环停止,如果我添加950,该脚本将添加943个帖子,然后将给我Fatal error "Maximum execution time reached"
。然后脚本停止。 我的代码有问题吗?或者是服务器问题?
<?PHP
$username = "xxxx";
$password = "xxxx";
$hostname = "localhost";
$loopstimes = 0;
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
//select a database to work with
$selected = mysql_select_db("xxxx_xxxx",$dbhandle)
or die("Could not select examples");
//execute the SQL query and return records
// Query to get all names
$result = mysql_query("SELECT DISTINCT names_list.* ... LIMIT 4050");
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
//fetch the data from the database
while ($row = mysql_fetch_array($result)) {
$p_name= $row["p_name"];
$category= $row["gcategory"];
$subcategory= $row["subcategory"];
$ase_date= $row["ase_date"];
//Fix the (') to prepare it for mysql query
$pp_name = $p_name;
$newp_name = str_replace("'","''",$p_name);
//Query to count results
$minprice = mysql_query("SELECT ... WHERE Product_p_name = '$newp_name' AND ORDER BY product_price_usd");
$countss = mysql_num_rows($minprice);
if($minprice === FALSE) {
die(mysql_error()); // TODO: better error handling
}
$rowm = mysql_fetch_array($minprice);
$minprice = '$'.$rowm["product_price_usd"];
// Create post object
$my_post = array(
'post_title' => 'My title...',
'post_status' => 'publish',
'post_author' => 1
);
// Insert the post into the database
$post_id = wp_insert_post( $my_post );
// Add Advanced Custom field values
update_field( "field_552fc3f84b43r", $p_name, $post_id );
//Regex the date to keep just the year
if (preg_match("/20.*/", $ase_date, $matches)) {
$ase_year = $matches[0];
}
//Insert Tags for Custom Taxonomies
wp_set_post_terms( $post_id, $audio_subcategory, 'subcategory-cpt', false );
wp_set_post_terms( $post_id, $fex_pro_rg, 'fex-pro-cpt', false );
$loopstimes++;
if ($loopstimes > 4400) {break;}
echo 'Post added!, '.$post_id.'<br>';
echo $loopstimes;
}
//close the connection
mysql_close($dbhandle);
echo 'Finish';
?>
答案 0 :(得分:0)
当然,您已经知道不应再使用mysql_*
功能了。
但是,现在就帮助你解决问题:
//Query to count results
$minprice_query_result = mysql_query("SELECT ... WHERE Product_p_name = '$newp_name' AND ORDER BY product_price_usd");
$countss = mysql_num_rows($minprice_query_result);
if($minprice_query_result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
$rowm = mysql_fetch_array($minprice_query_result);
$minprice = '$'.$rowm["product_price_usd"];
mysql_free_result ( $minprice_query_result );
顺便说一句,你为什么需要这个子查询?获得$minprice = '$'.$rowm["product_price_usd"];
?但是你永远不会在你的代码中使用那个变量!
答案 1 :(得分:0)
我使用XAMPP运行脚本,它完美无缺。对我来说,这意味着我的代码是正确的,问题出在主持人身上。 我解决这个问题的方法是LIMIT 500并更新mysql查询以排除已经分配的帖子的名称。然后我运行脚本X次,直到所有名称都被分配到帖子。
BTW我从mysql_ *改为mysqli_ * 谢谢你的建议!