これは私の最後の質問 (http://stackoverflow.com/questions/12945119/mysql-function-add-prices-from-multiple-tables) のフォローアップのようなものなので、MySQL コードはそこにあります。私の DB に関するバックグラウンドはすべて SQL Server 2008 と Access でした。私は自分の頭脳をグーグルで検索し、StackOverflow、StackExchange のプログラミングおよび Web 開発者ボードなどで漠然と関連する Q&A をすべて読みました (その免責事項を邪魔にならないようにする必要がありました)。
DreamCoder で関数を実行しましたが、入力を求めるプロンプトが表示されてから関数を実行すると、正しい答え (10 進数) が返されるため、関数のロジックは私が知る限り正しいものです。ただし、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 のドキュメントは事実上存在しません。それらの例はすべて「SELECT * from tblFoo WHERE bar=4」になります。)
エラーは、チェダーを変数ではなく列名として扱うことです:「「フィールドリスト」の不明な列「チェダー」」。私は何が欠けていますか?
SQLServer と ASP.NET でこれを行うことはできますが、MySQL/PHP はペンギンを混乱させます X_X (Linux ペンギンではなく、動物園のようなものです)。
PHP のバージョンは 5.3.17、MySQL は 5.1 です。PHP 5.4.* には関連するメソッドがいくつかあると思いますが、面倒な PHP バージョンの変更を行う前に、まず 5.3.* オプションを使い果たしたいと思います。
答えはおそらく自明であることは十分に承知しており、自分が何をしているかを学べば、自分を愚かだと呼んで私を凌駕する人はいないことを知っています.
ありがとうございました!このサイトは、Google が質問する前に、私が頼りにしているサイトの近くにあります ^_^ (そして、Google の質問に対する結果の少なくとも 2/3 は、とにかくここから来ています =-p )
編集: OK、MySQL は単独で動作します (SELECT from etc...)。