2011-01-25 18 views
3

成功しなくても何時間も答えを探していました。私はMySQLでユーザ定義関数を書いています。この関数は、さまざまなデータを取り出して1つの文字列に連結して返すために使用する識別子を渡します。 PHPのページからこの関数を呼び出し、その結果を出力したいと思います。PHPの中でMySQLユーザ定義関数を使用するにはどうすればよいですか?

失敗した試みは、次のとおりです。

1. $result = mysql_query("select functionName($id)"); 

2. $sql = "select functionName($id)"; 
    $result = mysql_query($sql, $link); 

3. functionName($id) 

任意のアイデア?

+0

ストアドプロシージャを参照していますか?もしそうなら..あなたはYourSP()に電話する必要があります –

+0

あなたは(1)と(2)の正しい軌道にいます。どのようなエラーメッセージが表示されますか?あなたはMySQLのクエリツールでそれを実行すると、クエリは正常に動作しますか? –

+0

ソリューション1と2は同じことを行い、 – arnaud576875

答えて

1

1と2は近いですが、$resultには関数呼び出しの結果は含まれません。むしろ、それはクエリから結果のクッキーを含むことになります。そのCookieを使用して実際のデータを取得することができます。mysql_fetch_row()。関数呼び出しは、SELECT文の値を返すだけで、 "SELECT 42"または "SELECT a FROM MyTable"と同じです。結果を得るには、結果を返す他のSQLクエリと同じメカニズムを使用します。つまり、クッキーを使用してmysql_fetch_row()と呼び出します。 (それは攻撃のためのベクターであり得る)を使用すると、SQL文字列に直接変数を補間することにしたくない

$result = mysql_query("select functionName($id)"); 
$row = mysql_fetch_row($result, $link); 
$returnValue = $row[0]; 

注:だからあなたの最終的なコードは次のようになります。しかし、私は、このコードは単なる例示のためのものであると仮定します。

+0

$ idの値は、前の検索選択ページから渡され、ユーザーがアクセスしたいレコードを識別します。これを行うための安全な方法は何ですか? – Chelle

+0

@Chelle: '$ id'の値に' mysql_real_escape_string() 'を使う:' $ sql = "functionName("。mysql_real_escape_string($ id、$ link) ")" ''を選び、 '$ sql'を'mysql_query()' – siride

+0

'$ id'をサニタイズする方法は**適切ではありません。 '$ id'が' 3)FROM Users WHERE 1 = 1 - '(その結果のクエリは' select functionName(3)FROM Users WHERE 1 = 1 - ')の動作を考慮してください。テーブル 'Users'のすべての行に対して関数が1回実行されます)。 – Hammerite

0

私は、同じ質問を持っていたし、DEVXから、この非常に便利なライト・アップを発見し、MySQLの関数を呼び出すについての下部の一部particulary:次のようにmysqliのに関して

http://www.devx.com/webdev/Article/42887/0/page/2

、私のコードは今あります:

$result = mysqli_query($sqlconnection,"SELECT functionName($id)"); 
$row = mysqli_fetch_row($result); 
return $row[0]; 

が完全に機能します。

関連する問題