2

我刚刚完成了这个脚本的工作,我需要在同一页面中多次使用它。但是,当我第二次使用它时,我收到错误 Fatal error: Cannot redeclare get_names() (previously declared. 我环顾四周寻找答案,但我能找到的只是使用 once 命令,但它似乎不起作用用 get. 这是脚本:

<?php
$db = mysql_connect('localhost', 'username', 'pass') or die("Database error");
mysql_select_db('dbname', $db);

$query = "SELECT pool FROM winners";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result))
if ($row['pool'] % 2) {
    echo "<h4>Result 1</h4>";
    $names = get_names(1);
    foreach($names as $name) {
        echo $name . "<br/>";
    }
} else {
    echo "<h4>Result 2</h4>";
    $names = get_names(0);
    foreach($names as $name) {
        echo $name . "<br/>";
    }
}

function get_names($pool_result)
{
$name_array = array();

$query = "SELECT * FROM comments WHERE commentid % 2 = $pool_result";
$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
    array_push($name_array, $row['name']);
}

return $name_array;

} ?>

4

4 回答 4

2

这是一个丑陋的黑客,但你可以把它放在函数周围:

if ( !function_exists("get_names") ) {

/// the function

}

更好的方法当然是include_once("includefile.php");includefile.php包含有问题的函数(注意:includefile.php也需要开始和结束<?php ?>标签)。

于 2012-02-14T01:57:37.570 回答
2

您可以将函数包装在 中if(!function_exists('get_names')),或者使用include_oncerequire_once包含该文件,而不是include或修复您的调用脚本以不包含它两次(或更多)。

于 2012-02-14T01:58:16.820 回答
1

将函数定义放入它自己的文件中,并在该文件的页面顶部调用一次包含(或要求)。

get_names被多次定义,因此第二次引发致命错误。

编辑:

唯一需要在它自己的文件中的部分是函数定义:

function get_names($pool_result)
{
    $name_array = array();

    $query  = "SELECT * FROM comments WHERE commentid % 2 = $pool_result";
    $result = mysql_query($query);

    while ($row = mysql_fetch_array($result))
        array_push($name_array, $row['name']);

    return $name_array;
}

虽然我和其他人肯定会提倡进一步组织代码,但如果你把这个函数放在一个像 library.php 之类的文件中,然后require_once('path/to/library.php')它,你应该能够多次运行它的其余部分。

于 2012-02-14T01:56:27.723 回答
0

你可以试试:

<?php
$db = mysql_connect('localhost', 'username', 'pass') or die("Database error");
mysql_select_db('dbname', $db);

$query = "SELECT pool FROM winners";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result))
if ($row['pool'] % 2) {
    echo "<h4>Result 1</h4>";
    $names = get_names(1);
    foreach($names as $name) {
        echo $name . "<br/>";
    }
} else {
    echo "<h4>Result 2</h4>";
    $names = get_names(0);
    foreach($names as $name) {
        echo $name . "<br/>";
    }
}
if(!function_exists("get_names")) {

  function get_names($pool_result)
  {
  $name_array = array();

  $query = "SELECT * FROM comments WHERE commentid % 2 = $pool_result";
  $result = mysql_query($query);

  while ($row = mysql_fetch_array($result)) {
      array_push($name_array, $row['name']);
  }

  return $name_array;
}
于 2012-02-14T01:58:53.120 回答