PHP_PDO 调用存储过程,返回参数问题

WBOY
Lepaskan: 2016-06-23 14:39:01
asal
1080 orang telah melayarinya

$stmt = $db->prepare("CALL pro_test(?,@?)");		$stmt->bindParam(1, $name);		$stmt->bindParam(2, $return_value, PDO::PARAM_STR, 4000);				// 插入一行		$name = '成都市';		$stmt->execute ();		print_r($return_value);
Salin selepas log masuk


调用存储过程,返回参数怎么是空的,么有,查看数据库,已经成功添加了数据,
直接在数据库中执行
SET @n = -1;
CALL pro_test("啊是打算",@n);
select @n;
返回的都是正确的参数


回复讨论(解决方案)

调用存储过程时,数据库可能返回多个结果集
依次是:基本的 select 的结果,存储过程1的结果,存储过程2的结果 ....
你的 SQL 指令这是 CALL pro_test(?,@?) 没有 select 所以只能位于第二个结果集
如果写作 select CALL pro_test(?,@?) 就位于第一结果集了
当然环境十多变的,你也确实不能准确的知道结果集会摆在哪里
于是就需要循环读取

  do {    $rows = $stmt->fetchAll(PDO::FETCH_NUM);    if ($rows) {      print_r($rows);    }  } while ($stmt->nextRowset());
Salin selepas log masuk
Salin selepas log masuk

调用存储过程时,数据库可能返回多个结果集
依次是:基本的 select 的结果,存储过程1的结果,存储过程2的结果 ....
你的 SQL 指令这是 CALL pro_test(?,@?) 没有 select 所以只能位于第二个结果集
如果写作 select CALL pro_test(?,@?) 就位于第一结果集了
当然环境十多变的,你也确实不能准确的知道结果集会摆在哪里
于是就需要循环读取

  do {    $rows = $stmt->fetchAll(PDO::FETCH_NUM);    if ($rows) {      print_r($rows);    }  } while ($stmt->nextRowset());
Salin selepas log masuk
Salin selepas log masuk


按照你说的,在sql前加上 select, 执行后查看数据库没有任何执行结果,不加之前都能成功添加数据,并且没有报错。
去掉select,能添加数据,但是 print_r($stmt->fetchAll(PDO::FETCH_NUM)); 返回的结果是Array ( )
,不怎么懂,希望能讲解

你在数据库管理器中都要

SET @n = -1;CALL pro_test("啊是打算",@n);select @n;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

执行3条指令

那么在 php 中就怎么简化成 1 条了呢

你在数据库管理器中都要

SET @n = -1;CALL pro_test("啊是打算",@n);select @n;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

执行3条指令

那么在 php 中就怎么简化成 1 条了呢

那么在PHP中应该怎么写?查了很多资料,PHP.net 中的demo都是错的· 头都打了

你在数据库管理器中都要

SET @n = -1;CALL pro_test("啊是打算",@n);select @n;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

执行3条指令

那么在 php 中就怎么简化成 1 条了呢

想通了
$stmt = $db->prepare("CALL pro_test(?,@sp_result);");		$stmt->bindParam(1, $name);;		$stmt->execute ();		$outputArray = $db->query("select @sp_result")->fetch(PDO::FETCH_ASSOC);
Salin selepas log masuk


谢谢思路

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!