PHP PDO和存储功能

时间:2011-01-14 22:37:41

标签: php mysql pdo

我刚开始研究php pdo并已连接到mysql数据库并运行了一个简单的SELECT语句。我有一个我在使用pdo之前创建的存储函数,在使用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;

有什么建议吗?

1 个答案:

答案 0 :(得分: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开发此函数类。

如果你想让人们使用API​​来运行它而不会被篡改,或者你打算在多个应用程序中使用这个查询(例如PHP,一个ASP也可能是一个桌面应用程序等等)然后使用MySQL因为居住地更好。

我个人更喜欢PHP函数,以防你需要移植数据库等,以及在查询结果中添加更复杂的逻辑等等。在考虑迁移时,MySQL程序和函数对我有所限制......

添加注意 - 程序和功能不同。你使用过这两个名字。在这种情况下,我从代码中假设它是一个过程,但一定要明白你使用的是什么以及为什么。它们用于不同的事情。