PHP PDO 和存储函数

标签 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;

有什么建议吗?

最佳答案

对于存储过程,您需要稍微改变语法。请注意,必须包含长度。

<?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 过程和函数对我来说是一种限制...

添加注释 - 过程和功能不同。这两个名字你都用过。在这种情况下,我从代码中假设它是一个过程,但一定要了解您正在使用哪个过程以及为什么。它们的用途不同。

关于PHP PDO 和存储函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696723/

相关文章:

php - 不可能在变量中返回简单函数

php - 对接受字符串参数以创建 PDO 对象的 PHP 类进行单元测试

PHP/MySQL : why my query doesn't work?

php - PDO 查询绑定(bind)字符串而不是整数返回结果

PHP 5.3.1 全局 ://exception

php - 获取最高父级的 ID,而不 pipe 级的 ID

php - laravel eloquent 删除以零结尾的整数的最后一个零

mysql - 如何快速更新多行(1 500 000)

php - 如何管理部署上的 Laravel 队列?

php - 如何将印地语(梵文脚本)转换为英文字母