2013-01-14 171 views
0

我希望这没有被问到别的地方,因为我看,但在这里。我写了这个函数为我创建表。它可以工作,但是我遇到的问题是每次我调用这个函数时都会运行查询。有没有办法调用这个函数并将查询传递给函数?有没有办法将查询传递给PHP函数

function createawardtables($awardname, $awardshortname, $maxawards, $id){  
    $query="SELECT * FROM awards WHERE id = $id"; 
    $result = mysql_query($query) or die("There was a problem with the SQL query: " . mysql_error()); 
    while($row = mysql_fetch_array($result)){ 
     $order = array("","1st","2nd","3rd","4th","5th","6th","7th","8th",'9th',"10th"); 
     echo "<table><th colspan=4><font color=maroon size='4pt'><u><b>Orders of the $awardfullname</b></u></font></th>"; 
     for($i=1; $i<$maxawards+1; $i++) { 
      ${$awardshortname.$i} = dateconvert(($row["$awardshortname$i"]), 2); 
      ${$awardshortname.$i.'by'} = $row["$awardshortname{$i}by"]; 
      ${$awardshortname.$i.'memo'} = $row["$awardshortname{$i}memo"]; 
      echo "<tr> 
       <td>$order[$i] Order given on </td> 
       <td><input type=text name='$awardshortname$i' title='mm/dd/yyyy' value= '${$awardshortname.$i}' size=8/></td> 
       <td>by <input type=text name='$awardshortname{$i}by' title='Name of who gave the award.' value='${$awardshortname.$i.'by'}'size=15/></td> 
       <td>for <input type=text name='$awardshortname{$i}memo' title='What the award was give for.' value='${$awardshortname.$i.'memo'}'size=15/></td> 
       </tr>"; 

      if($i==10 or $awardshortname=="initiate"){ 
      echo "</table><br />"; 

      }; 
     }; 
    }; 
    mysql_free_result($result); 
}; 
+4

您正在使用[**的**过时的数据库API(HTTP://计算器。 com/q/12859942/19068),并应使用[现代替代](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也是(取决于'$ id'来自哪里)**容易受到[SQL注入攻击](http://bobby-tables.com/)**现代API会使[防御]更容易http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己从。 – Quentin

回答

2

当然,只需添加一个新的参数(如$awardname)到您的功能及使用方法,当你调用“的mysql_query()`。

也被告知,使用mysql_*功能,强烈建议:

这个扩展不赞成PHP 5.5.0,并且将在 将来被移除。相反,应该使用MySQLi或PDO_MySQL扩展。

http://www.php.net/mysql_query

0

在这里你去

function createawardtables($result, $awardname, $awardshortname, $maxawards, $id) 
{  
    while($row = mysql_fetch_array($result)){ 
     $order = array("","1st","2nd","3rd","4th","5th","6th","7th","8th",'9th',"10th"); 
     echo "<table><th colspan=4><font color=maroon size='4pt'><u><b>Orders of the $awardfullname</b></u></font></th>"; 
     for($i=1; $i<$maxawards+1; $i++) { 
      ${$awardshortname.$i} = dateconvert(($row["$awardshortname$i"]), 2); 
      ${$awardshortname.$i.'by'} = $row["$awardshortname{$i}by"]; 
      ${$awardshortname.$i.'memo'} = $row["$awardshortname{$i}memo"]; 
      echo "<tr> 
       <td>$order[$i] Order given on </td> 
       <td><input type=text name='$awardshortname$i' title='mm/dd/yyyy' value= '${$awardshortname.$i}' size=8/></td> 
       <td>by <input type=text name='$awardshortname{$i}by' title='Name of who gave the award.' value='${$awardshortname.$i.'by'}'size=15/></td> 
       <td>for <input type=text name='$awardshortname{$i}memo' title='What the award was give for.' value='${$awardshortname.$i.'memo'}'size=15/></td> 
       </tr>"; 

      if($i==10 or $awardshortname=="initiate"){ 
      echo "</table><br />"; 

      }; 
     }; 
    }; 
    mysql_free_result($result); 
}; 

和函数调用

$query="SELECT * FROM awards WHERE id = $id"; 
$result = mysql_query($query) or die("There was a problem with the SQL query: " . mysql_error()); 
createawardtables($result, $awardname, $awardshortname, $maxawards, $id); 
+0

感谢您的帮助我尝试过类似的东西,但我用call_user_func – Warmour

相关问题