2011-01-14 20 views
0

私はPHPのpdoを調べ始め、mysqlデータベースに接続して、単純なSELECTステートメントを実行しました。私はpdoを使う前に作成したストアドファンクションを持っていますが、実際にはPDOを使ってストアドファンクション/プロシージャを使う必要がありますか?PHPのPDOとストアドファンクション

BEGIN 

    DECLARE new_username VARCHAR(32); 

    SELECT `username` 
     INTO new_username 
     FROM `users` 
    WHERE `userID` = ID; 

RETURN COALESCE(new_username, 'Invalid ID'); 

END 

PDOを使用している場合は、上記の機能を使用する際には何か問題はありますか?この機能は他の選択肢などにも拡張されます.PDOを使用して関数を呼び出す際に問題が発生しています。

include ('connection.php'); 

$userID = 0; 
$stmt = $db->prepare("SELECT username(:user_id)"); 
$stmt->bindParam(':user_id', $userID, PDO::PARAM_INT); 
$stmt->execute(); 
$result = $stmt->fetch(PDO::FETCH_OBJ); 
echo $result->new_username; 

アドバイスはありますか?

答えて

2

ストアドプロシージャでは、構文を少し変更する必要があります。長さを含める必要があることに注意してください。

<?php 
$userId = "0"; //This deeclares it a String FYI not an Int in technical terms... 
$stmt = $dbh->prepare("CALL sp_returns_string(?)"); 
$stmt->bindParam(1, $userId, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000) 

// call the stored procedure 
$stmt->execute(); 

print "procedure returned $return_value\n"; 
?> 

詳細については、http://php.net/manual/en/pdostatement.bindparam.phpを参照してください。

その価値があるかどうかに応じて...それは依存します。 PHP関数を作成する場合、getUserName($ id)を作成し、その価値がない場合は、PHP関数を使用して、それを変更することができます。これを単一のPHPアプリケーションまたは再利用可能なPHPクラス。

人がおそらく改ざんすることなく、またはこのクエリを複数のアプリケーション(PHP、ASP、おそらくデスクトップアプリケーションなど)で利用することを意図している場合など、居住地としてのMySQLが優れています。

個人的に私は

...移行を検討する際に制約されているポートのデータベースなどと私には、クエリ結果になど、MySQLのプロシージャとファンクションを、より複雑なロジックを追加するには容易にあなたが持っている場合、PHPの関数を好みます

追加注 - 手順と機能は異なります。あなたは両方の名前を使用しました。この場合、私はコードからそのプロシージャを推測していますが、あなたが使用している理由とその理由を理解しておいてください。彼らはさまざまなもののために意味されています。

+0

'PDO :: PARAM_INT'は、型キャストfyiを使って' '1 '' '' 'になります。 – RobertPitt

+0

opps私は自分のuserIDを変更するのを忘れてしまいました。申し訳ありませんがIntであることを意図していました。上記のコードはユーザー名を返す関数です。私はまだ手続きを使っていますが、実際に手続きをしたときの質問に入れています。ありがとうございます。 – Elliott

+0

PHPは "手続きを返しました"と表示しますが、その後は何も表示されません。ありがとう – Elliott