php - 如何将参数传递给mysql中的存储函数?

标签 php 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;
/

而且我不知道如何将参数传递给这个函数,以便它可以计算 BMI。我已经成功地使用以下 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();

但我只是不知道如何将用户参数传递给函数。请帮忙!

非常感谢!

最佳答案

您只需要准备一个查询字符串,如下部分:

$query = "SELECT * FROM PERCENTILE";

在您的情况下,您需要有变量来保存这些输入参数:

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

然后准备查询字符串:

$query = "CALL calcBMI( '$cPol' , '$dPregled' , '$dRodjen' , '$nVisina' , '$nTezina' )";

关于php - 如何将参数传递给mysql中的存储函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38867340/

相关文章:

php - 在 phpunittest 中访问实体管理器

mysql - 将 MS-SQL Server 存储过程转换为 MySQL 查询

php - 没有使用 SELECT * INTO OUTFILE 创建的文件

PHP MYSQL 返回字段中的数组

php - 如何从 (PHP) shell 脚本中取回数据

javascript - 在wordpress中动态添加和删除html表中的行

php - mysql php 日期时间查询语法

php - 在刷新实体之前计算唯一别名

mysql - 在 ubuntu 终端中创建存储过程

MySQL InnoDB 表丢失,不计入数据库结构