PHP将变量传递给我自己的MySQL函数——使用变量作为列名的DB
这是我最后一个问题的后续部分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访问代码如下所示: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等的每一个甚至是模糊相
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讨厌某些东西。。。