php - Laravel 永无止境的 EXEC

标签 php sql-server laravel laravel-5 stored-procedures

我正在将一个程序从纯 PHP 重写到 Laravel,我在执行存储过程时遇到了问题(我没有写它)。

当我尝试

$sheetLines = DB::select("exec XXXXXXX".dbo.PRICELIST '?'", [$id]); 

当 PHP 还没有达到最大内存时,它会继续运行。 (增加内存只会让它跑得更久)

同时在旧程序中它需要大约 3 秒并发送响应。

$tsql = "exec XXXXXXX.".dbo.PRICELIST '".$id."'";

此外,当我从其他模块调用其他存储过程时,一切正常。

我注意到如果我尝试这样的事情也会发生,例如:

DB::select(count(price) from orders group by price);
// would work with: count(price) as price_count

我已经搜索了很多这个问题,但没有找到解决方案。 如果有任何帮助,我将不胜感激

最佳答案

我会访问底层 PDO 驱动程序来执行存储过程。

尝试

$db = DB::getPdo();

$stmt = $db->prepare("EXEC XXXXXXX.dbo.PRICELIST :id");
$stmt->bindValue(':id', $id);

$result = $stmt->execute();

如果不行你可以试试query方法;

$query = DB::getPdo()->query("EXEC XXXXXXX.dbo.PRICELIST $id");

关于您的计数问题,在 Laravel 的 Eloquent 中,您可以执行以下操作;

$count = DB::table('orders')->groupBy('price')->count('price');

关于php - Laravel 永无止境的 EXEC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49513304/

相关文章:

sql-server - ADO 不传递第一个参数值

sql - 如何选择列值为空的行?

php - 如何在 Laravel 4 中使用 rackspace php-opencloud

php - 准备好的语句。执行后绑定(bind)是否正确?

php - Behat 不使用最简单的测试

php - 使用 while 循环对 PHP MYSQL 进行排名

php - 缓存节点故障导致数据不一致

SQL - 为 IN 子句使用变量

php - 如何将 Laravel 5.5 应用程序部署到 Godaddy cPanel 共享主机

php - laravel 5.5 邮件通知不更新内容