gpt4 book ai didi

php - 动态 SQL - PDO 和 MySQL - 在哪里构建它?

转载 作者:行者123 更新时间:2023-11-30 00:11:47 28 4
gpt4 key购买 nike

我正在构建一个 Web 应用程序,它接受用户对许多数据元素(可能超过 50 个)的选择,并动态查询这些选择。该查询始终针对一个(已知)表运行。但 WHERE 子句每次都会根据用户的选择而变化。

经过大量阅读后,似乎创建查询的逻辑可以在 PHP 级别(通过 PDO 准备好的语句)或 DB 级别(在 MySQL 存储过程中)完成。

我的问题是,从性能角度(缓存、代码执行、网络传输等)来看,哪种方法更好?

这是 MySQL 5.6。

所以在 PHP 中(只有 2 个参数而不是 50 多个参数的虚拟示例):

$query = 'SELECT * FROM users';

$cond = array();
$params = array();

if (!empty($firstname)) {
$cond[] = "firstname = ?";
$params[] = $firstname;
}

if (!empty($lastname)) {
$cond[] = "lastname = ?";
$params[] = $lastname;
}

if (count($cond)) {
$query .= ' WHERE ' . implode(' AND ', $cond);
}

$stmt = $db->prepare($query);
$stmt->execute($params);

或者在 MySQL 中,PHP 传入参数并执行定义的存储过程。 (再次,一个简单的虚拟示例):

delimiter // 
CREATE PROCEDURE dynamic(IN firstname CHAR(64), IN lastname CHAR(64))
BEGIN

...
...(skipping over the buildup of the where clause string)
...

SET @query = CONCAT("SELECT * FROM users WHERE 1=1 ", @strwhere);

PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
//
delimiter ;

最佳答案

would be the better approach from a performance perspective (caching, code execution, trips across the network, etc)?

平等。

关于php - 动态 SQL - PDO 和 MySQL - 在哪里构建它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com