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


Dynamic SQL - PDO and MySQL - where to build it?

我正在构建一个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 ;
从性能的角度(缓存、代码执行、跨网络传输等)来看,

是更好的方法?