【问题标题】:Write PHP files through a PHP file from records in a mySQL database通过 PHP 文件从 mySQL 数据库中的记录写入 PHP 文件
【发布时间】:2013-07-03 23:43:48
【问题描述】:

以前使用 MS Access 的解决方案没有成功,所以这次我尝试使用 php。

我有这个 php 文件,它可以打开数据库,读取记录列表并为每条记录创建一个 html 文件,在它们各自的文件夹名称中(文件夹名称也可以在记录的字段中找到)

代码似乎有效,但没有超过第一条记录。我根本没有收到任何类型的错误消息,所以我对问题所在感到困惑。我从这里找到的许多帖子中创建了代码。我自己唯一想知道的是 open 和 write 函数(或任何它们被调用的函数)在脚本中的顺序是否正确。也许原因是完全不同的。

基本上,我要做的是让脚本为其各自文件夹中的每个域创建一个“配置”php 文件。所有配置文件之间的唯一区别是 domainid 字段。

数据库中的表被命名为域。这些字段是 domainid ,它是一个唯一的数字;域,其中包含域名 - 例如domain.com - 用作域文件夹;和域组,用作“类别”文件夹。

出于安全考虑,我更改了所有值,但数据库连接工作正常。

<?php
$db_name = "dbname"; 
$dbusername = "dbname"; 
$dbpassword = "password"; 
$server = "dbname.blahblahbla.hosted.com";

$connection = mysql_connect($server, $dbusername, $dbpassword) or die(mysql_error());
$db = mysql_select_db($db_name,$connection)or die(mysql_error());

    $htmlquery = "select * from domains ORDER BY domain";
    $htmlresult = mysql_query($htmlquery,$connection) or die(mysql_error());
    $htmlinfo = mysql_fetch_array($htmlresult);

    if ($htmlresult == 0) { 
        echo "<p>No Recourds Found</p>";
    } else {

    for ($i=0; $i <$htmlresult; $i++) { 

$p = "<?php \n"; 
$p.= " //LS \n";
$p.= " define('Disable_Ads', 'No'); //Yes or No \n";
$p.= " define('Site_ID', ".$htmlinfo['domainid']."); \n";
$p.= " define('Short_Paragraph_Size',500);\n";
$p.= " define('Long_Paragraph_Size',1000);\n";
$p.= " ?> \n";

    $htmlfolder = strtolower($htmlinfo['domaingroup']);
    $htmldomain = strtolower($htmlinfo['domain']);  
    $a = fopen($htmlfolder."/".$htmldomain."/admin_config.php", 'w');
    fwrite($a, $p);
    echo $htmldomain." Completed <br />"; // TEMP - To try to see the looping of domain names
    fclose($a);
    }
}
?>

谢谢

【问题讨论】:

标签: php for-loop fwrite fclose


【解决方案1】:

用 while 循环替换你的 for 循环

while($htmlinfo = mysql_fetch_assoc($htmlresult) {
   $p = "<?php \n"; 
   $p.= " //LS \n";
   $p.= " define('Disable_Ads', 'No'); //Yes or No \n";
   //.....
   $htmlfolder = strtolower($htmlinfo['domaingroup']);
   $htmldomain = strtolower($htmlinfo['domain']);  
   //...
}

现在你只获取一行(你也应该调用 mysql_fetch_assoc 而不是 mysql_fetch_array)所以你正在编写同一个文件 x 行时间

还请至少升级到mysqli 或最好升级到PDO,因为不推荐使用 mysql_* 扩展

【讨论】:

    【解决方案2】:

    您需要遍历所有行。

    查询完数据库后,可以:

    while($row = mysql_fetch_assoc($query)) {
      $domain = $row['domain'];
      $domaingroup = $row['domaingroup'];
      // etc...
    }
    

    但是,我们不建议使用mysql_* 函数。相反,至少使用 MySQLi 或 PDO。

    【讨论】:

    • 感谢您的回复 Rob W。我更新了脚本以反映您的示例,但出现错误:警告:mysql_fetch_assoc() 期望参数 1 是资源,给定字符串 .. .。我将您的“$query”更改为“$htmlquery”,因为这是我的脚本中的内容,但是任何一个都给出了相同的错误消息。任何想法,我还缺少什么?
    • $query 在我的例子中应该是mysql_query()的结果
    【解决方案3】:

    根据 Kris 和 Rob 的回复,对于那些可能正在寻求做类似事情的人来说,这是正确的工作代码(因为我不熟悉 php 或 mysql,这只是一个临时解决方案,其他人可能会看进入 Kris 和 Rob 建议的“mysqli”和“PDO”)。这对我来说效果很好。谢谢各位!

    感谢@Kris,因为他回复了与我的帖子相关的代码示例。他专门使用了我代码中的变量,使其更容易理解和排除故障;这就是我对他的回答的看法。 (不过,我很感谢您的意见)

    <?php
    $db_name = "dbname"; 
    $dbusername = "dbname"; 
    $dbpassword = "password"; 
    $server = "dbname.blahblahbla.hosted.com";
    
    $connection = mysql_connect($server, $dbusername, $dbpassword) or die(mysql_error());
    $db = mysql_select_db($db_name,$connection)or die(mysql_error());
    
        $htmlquery = "select * from domains ORDER BY domain";
        $htmlresult = mysql_query($htmlquery,$connection) or die(mysql_error());
        $htmlinfo = mysql_fetch_array($htmlresult);
    
        if ($htmlresult == 0) { 
            echo "<p>No Recourds Found</p>";
        } else {
    
        while($htmlinfo = mysql_fetch_assoc($htmlresult) {
    
    $p = "<?php \n"; 
    $p.= " //LS \n";
    $p.= " define('Disable_Ads', 'No'); //Yes or No \n";
    $p.= " define('Site_ID', ".$htmlinfo['domainid']."); \n";
    $p.= " define('Short_Paragraph_Size',500);\n";
    $p.= " define('Long_Paragraph_Size',1000);\n";
    $p.= " ?> \n";
    
        $htmlfolder = strtolower($htmlinfo['domaingroup']);
        $htmldomain = strtolower($htmlinfo['domain']);  
        $a = fopen($htmlfolder."/".$htmldomain."/admin_config.php", 'w');
        fwrite($a, $p);
        echo $htmldomain." Completed <br />"; // TEMP - To try to see the looping of domain names
        fclose($a);
        }
    }
    ?>
    

    【讨论】:

    • 很高兴你让它工作了,但是有一条评论,你放弃了第一个结果,因为你正在调用 $htmlinfo = mysql_fetch_array($htmlresult);在第 12 行。您应该删除此行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多