我刚开始研究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;
有什么建议吗?
答案 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程序和函数对我有所限制......
添加注意 - 程序和功能不同。你使用过这两个名字。在这种情况下,我从代码中假设它是一个过程,但一定要明白你使用的是什么以及为什么。它们用于不同的事情。