从PHP调用存储过程,使用PHP变量作为IN参数

时间:2014-11-09 07:09:13

标签: php mysql stored-procedures

我的表格看起来像这样:

Category Table Sub Category Table

我正在尝试使用一个过程来获取与给定CategoryName具有相同CategoryID的所有SubCategoryNames:这一个:

CREATE PROCEDURE getSubCategory(IN category TEXT) READS SQL DATA
     BEGIN
         SELECT `SubCategoryName` FROM `sub_category` WHERE `CategoryID` = (SELECT `CategoryID` FROM `category` WHERE `CategoryName` = category);
     END

出于某种原因,当我尝试从PHP代码调用此过程时,使用PHP变量,如下所示:

$result = $connection->query($connection->real_escape_string("CALL `jcarillo_db`.getSubCategories(" . $superCategory . ")"));
    // based on that, print the appropriate menu
    if ($result)
    {
        // print an <option> for each row in the result set (remember, $result will have one entry per row!)
        while ($row = $result->fetch_row())
        {
            require_once("argumentParser.php");
            printf('<option name="%sOption" value="%s">%s</option>\n', toCamelCase($row[0]), $row[0], $row[0]);
        }
        // don't forget to free result set!
        $result->close();
    }
    else
    {
        echo "Fetch failed(" . $connection->errno . ")" . $connection->error;
    }

&#34;提取失败&#34;得到回应,而不是结果!然而,出于某种原因,当我尝试从数据库中调用相同的存储过程时(即通过phpMyAdmin),它可以工作!我到底做错了什么?!?! $connection设置正确,我知道这是因为我尝试从类别表中回显CategoryNames就可以了!

1 个答案:

答案 0 :(得分:0)

这里的问题是你试图使用String参数调用该函数,并且在不让MySQL知道它的字符串的情况下传递它。

请改为尝试:

$result = $connection->query("CALL `jcarillo_db`.getSubCategories('".$connection->real_escape_string($superCategory)."')");