Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将变量传递给我自己的MySQL函数——使用变量作为列名的DB_Php_Mysql_Function_Mysqli - Fatal编程技术网

PHP将变量传递给我自己的MySQL函数——使用变量作为列名的DB

PHP将变量传递给我自己的MySQL函数——使用变量作为列名的DB,php,mysql,function,mysqli,Php,Mysql,Function,Mysqli,这是我最后一个问题的后续部分http://stackoverflow.com/questions/12945119/mysql-function-add-prices-from-multiple-tables 所以MySQL代码就在这里。我在DBs方面的背景都是SQL Server 2008和Access,所以MySQL的特性越来越强。我已经用谷歌搜索了我的大脑,阅读了关于StackOverflow、StackExchange的编程和webdeveloper boards等的每一个甚至是模糊相

这是我最后一个问题的后续部分http://stackoverflow.com/questions/12945119/mysql-function-add-prices-from-multiple-tables 所以MySQL代码就在这里。我在DBs方面的背景都是SQL Server 2008和Access,所以MySQL的特性越来越强。我已经用谷歌搜索了我的大脑,阅读了关于StackOverflow、StackExchange的编程和webdeveloper boards等的每一个甚至是模糊相关的Q&A,我不得不避开这个免责声明

我在DreamCoder中运行了这个函数,当它只是提示我输入,然后运行这个函数时,它会返回一个十进制的正确答案,所以这个函数的逻辑就我所知是合理的。然而,当我试图从PHP调用该函数时,它出错了

DB访问代码如下所示:

function getQuote($json)

echo("JSON input: ");
var_dump($json);

    $array = json_decode($json, TRUE);
    echo("JSON decoded array: ");
    print_r($array);

    $cheese = $array[0];
    $meat = $array[1];
    $veg = $array[2];   

    $c = db_connect();
    $query = "SELECT calculatePrice($cheese, $meat, $veg)";
    var_dump($query);
    $result  = mysql_query($query , $c);
    if(!$result)
    {
        echo "\nCould not successfully run query ($query) from DB: " . mysql_error();
        exit;
    }

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

while($row = mysql_fetch_assoc($result)){
    echo("Row: ");
    var_dump($row);

    if(!$row)
        die("No price returned!" . var_dump($row));
    else
    {   
        return json_encode($row);   
    }
}  //end while
我编写了以下测试工具来手动向它提供数据。我知道JSON是正确的,因为完整的代码逐字给出了相同的错误,所以问题不是PHP就是MySQL

    <?php
        require_once 'DBUtils.php';

    $array = array();
    $array[] = "Chedder";
    $array[] ="Ham";
    $array[] ="Carrot";

    $json = json_encode($array);
    echo("JSON object:");
    var_dump($json);

    $test = getQuote($json);

        echo("Test: ");
        print_r($test);

    ?>
我也试过MySQLi,同样的交易,同样的错误。根据MySQL的文档,尽管它不多,但我正确地调用了函数并正确地传递了变量。PHP关于这方面的文档几乎不存在;他们的示例都是从tblFoo中选择*的,其中bar=4

错误在于它将切德尔视为列名而不是变量:“字段列表”中的未知列“切达”。我错过了什么

我可以在SQLServer和ASP.NET中不费吹灰之力就能做到这一点,但MySQL/PHP让企鹅们感到困惑,不是Linux企鹅,只是动物园的企鹅

PHP版本为5.3.17,MySQL版本为5.1,以防两者有所不同。我认为PHP5.4.*有一些相关的方法,但在我经历更改PHP版本的麻烦之前,我宁愿先使用所有5.3.*选项

我很清楚答案可能是显而易见的,并且知道一旦我知道自己在做什么,没有人会因为说自己愚蠢而超过我

再次感谢你!这个网站离我在谷歌前提问的地方很近,我问的任何谷歌问题至少有2/3的结果来自这里

编辑:
好的,MySQL单独工作,从等中选择。。。原来它想要的是“vs.”。

由于SQL字符串注入和占位符的缺乏,程序正在传入一个伪造的查询字符串

选择calculatePriceCheddar、火腿、胡萝卜; 。。SQL无效:这些应该是字符串文字,而不是[unbound]列标识符

扩展:MySQL在这里需要一个列或表达式,Cheddar、Ham和Carrot不是当前SQL语句中的列。它们也不是像“切达”或1+41这样的表达。这就是为什么错误消息会显示未知列“cheddar”,因为此语句中没有此类列绑定

确保函数获取字符串值的一种方法是在SQL语句的生成中添加


另外,验证它不需要有结果列名,例如选择calculatePrice。。作为colName,至少在SQL Server中是必需的。

列名为cheeseName、meatName、veggieName。切德尔是一段数据。我尝试了带引号和不带引号两种情况,结果都是一样的=-MySQL服务器正在进行计算并返回值,通过JSON传递回jQuery。请查看错误消息并检查实际使用的SQL查询字符串。如果查询不能手动运行,那么它也不会从PHP运行。这里没有特殊的上下文处理。查询字符串作为变量转储到屏幕:选择calculatePriceChedder、Ham、Carrot。字符串的大小写与其各自表中的条目相同。@Janet Yes。就像我在回答中说的那样。它是无效的。尝试在mysql CLI中手动运行它。也就是说,运行我写的,这是代码生成的。复制和粘贴。它产生了什么错误?Erf,同样的错误。我很抱歉误解了你先前的评论;;;所以MySQL讨厌某些东西。。。