2016-08-10 2 views
0

У меня есть функция, хранящуюся в базе данных MySQL:Как передать параметры хранимой функции в mysql?

CREATE OR REPLACE FUNCTION ORDINACIJA.calcBMI 
(
    cPol  varchar2, 
    dPregled date, 
    dRodjen date, 
    nVisina number, 
    nTezina number 
) return varchar2 is 
nBMI   number; 
nStarost  number; 
cBMIText  varchar2(100); 
nPothranjen number; 
nMrsav  number; 
nNormalan number; 
nGojazan  number; 
nPrekomjeran number; 
nMinTezina number; 
nMaxTezina number; 
begin 

    nBMI := round(nTezina/((nVisina/100)*(nVisina/100)),0); 
    nStarost := round(months_between(dPregled,dRodjen),0); 

    if nStarost>228 -- 19 godina 
    then 
     nPothranjen := 14; 
     nMrsav  := 18; 
     nNormalan := 25; 
     nGojazan  := 30; 
     nPrekomjeran := 35; 
    else 
     select per_3, per_15, per_85, per_97, per_99 
     into nPothranjen, nMrsav, nNormalan, nGojazan, nPrekomjeran 
     from percentile 
     where pol=cPol and mjesec=nStarost; 
    end if; 

    nMinTezina := ceil(nMrsav*(nVisina/100)*(nVisina/100)); 
    nMaxTezina := floor(nNormalan*(nVisina/100)*(nVisina/100)); 

    if (nPothranjen>0 and nBMI<=nPothranjen) 
    then 
     cBMIText := 'Ekstremna pothranjenost'; 
    elsif (nBMI>nPothranjen and nBMI<=nMrsav) 
    then 
     cBMIText := 'Pothranjenost'; 
    elsif (nBMI>nMrsav and nBMI<=nNormalan) 
    then 
     cBMIText := 'Normalna tjesna masa'; 
    elsif (nBMI>nNormalan and nBMI<=nGojazan) 
    then 
     cBMIText := 'Prekomjerna tjesna masa'; 
    elsif (nBMI>nGojazan) 
    then 
     cBMIText := 'Gojaznost (pretilost)'; 
    else 
     cBMIText := '?????'; 
    end if; 
    if nStarost>72 
    then 
     cBMIText := cBMIText || ', idealno ' || nMinTezina || '-' || nMaxTezina ||'kg'; 
    end if; 

    return(cBMIText); 

exception when others then return(null); 
end calcBMI; 
/

И я не знаю, как передать параметры этой функции, поэтому он может вычислить индекс массы тела. Мне удалось выбрать всю информацию из таблицы с этим PHP код:

// Create connection 
$conn = new mysqli($servername, $username, $password, $database); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$query = "SELECT * FROM PERCENTILE"; 
if ($result = mysqli_query($conn , $query)) { 

    echo("<div class = 'data_wrapper'>"); 

    // Display Header of the table 

    $fieldcount=mysqli_num_fields($result); //value = number of columns 

    $row = mysqli_fetch_assoc($result);  //Fetch a result row as an associative array: 

     //array to string conversion 

     echo("<table id='example' class='table table-striped table-bordered' cellspacing='0' width='100%'>"); 

     echo("<thead> <tr>"); 

     foreach($row as $item){ 

      echo "<th>" .$item. "</th>"; 
     } 

     echo("</tr> </thead>"); 


     //Footer 
     echo("<tfoot> <tr>"); 

     foreach($row as $item){ 

      echo "<th>" .$item. "</th>"; 
     } 

     echo("</tr> </tfoot>"); 



     //Display Data within the table 
     echo("<tbody>"); 
     while ($row = mysqli_fetch_assoc($result)){ 
       echo "<tr>"; 
       foreach ($row as $item){ 
        echo "<td contenteditable = 'true'>" . $item . "</td>"; //Change contenteditable later 
        //Editable data should be constricted, int = numbers only, string = words, date = date 
      } 
      echo "</tr>"; 
     } 
     echo("<tbody>"); 
     echo "</table>"; 
     echo("</div>"); 

    } 
/* close connection */ 
$mysqli->close(); 

Но я просто не могу понять, как сделать параметры пользователей перейти к функции. Пожалуйста помоги!

Большое спасибо!

+0

http://php.net/manual/en/pdo.prepared-statements.php – Whencesoever

+1

это ваш SQL $ SQL = «вызов calcBMI (сП ol, dPregled date, dRodjen, nVisina, nTezina) "; –

ответ

0

Вам просто нужно подготовить строку запроса, как эта часть:

$query = "SELECT * FROM PERCENTILE"; 

В вашем случае, вам нужно иметь переменные для хранения этих входных параметров:

$cPol; 
$dPregled; 
$dRodjen; 
$nVisina; 
$nTezina; 

Затем подготовить строку запроса :

$query = "CALL calcBMI('$cPol' , '$dPregled' , '$dRodjen' , '$nVisina' , '$nTezina')"; 
Смежные вопросы