ThinkPHP 3.0调用存储过程问题

ted 2012-02-27 02:28:24

$model = D('Demo');
$str = 'aaa';
$sql = "SET @uname = '$str'; CALL new_pr(@uname);";
$data = $model -> query($sql, true);
echo $model -> getLastSql();


输出
SET @uname = 'aaa'; CALL new_pr(@uname);
放到查询编辑器里面可以执行

求解
...全文
763 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ted 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xuzuning 的回复:]

对于 #13 的代码:
第一段和第三段除没有对 $str 赋值外,没有什么不同
第三段不行的原因,应该是 $str 没赋值

第一段可以而第二段不可以,则表示
ThinkPHP 3.0 依然没有绕过 php 除声明存储过程外,不能不能在一个 query 中执行一条以上 sql 指令的安全约定
你需要分别执行那两条 sql 指令
[/Quote]

tp的query的确不能执行多条语句
第三段的 $str 赋值了,也不行

$db = M('Demo');
$model = M();
$str = 'aaa';
$sql = "CALL new_pr('$str')";
$data = $model -> query($sql);

如果去掉$db = M('Demo');就可以
xuzuning 2012-03-05
  • 打赏
  • 举报
回复
对于 #13 的代码:
第一段和第三段除没有对 $str 赋值外,没有什么不同
第三段不行的原因,应该是 $str 没赋值

第一段可以而第二段不可以,则表示
ThinkPHP 3.0 依然没有绕过 php 除声明存储过程外,不能不能在一个 query 中执行一条以上 sql 指令的安全约定
你需要分别执行那两条 sql 指令
ted 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 libo_sina 的回复:]

可能是thinkphp的数据库连接配置时连接数据库是没得后面的几个参数的原因吧
[/Quote]

应该不是

$model = M();
$str = 'aaa';
$sql = "CALL new_pr('$str)";
$data = $model -> query($sql);
var_dump($data);

这样就可以执行并输出结果,其它用法就不行
比如不能

$sql = "SET @uname = '$str';";
$sql .= "CALL new_pr(@uname)";

另外如果先

$model = D('Demo');
$model = M();
$sql = "CALL new_pr('$str')";
$data = $model -> query($sql);
var_dump($data);

这样出来的结果也是bool(false)
libo_sina 2012-03-02
  • 打赏
  • 举报
回复
可能是thinkphp的数据库连接配置时连接数据库是没得后面的几个参数的原因吧
ted 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 libo_sina 的回复:]

你说的情况我遇到过!在thinkphp中调用存储我成我是这样解决的:在链接数据库时多加了个参数就解决了:
define('CLIENT_MULTI_RESULTS',131072);
$conn = mysql_connect('127.0.0.1','root','123456','1',CLIENT_MULTI_RESULTS) or die('连接失败');

你可以试一下!
[/Quote]

感谢你的回答,原生的我试过
但是用thinkphp的query就不行
不过我看别人用query都可以,不知道为什么

//原生调用存储过程方式
// define('CLIENT_MULTI_RESULTS', 131072);
// $conn = mysql_connect('localhost:3306', 'root', '', 1, CLIENT_MULTI_RESULTS);
// $db = mysql_select_db("thinkphp_demo", $conn);
// $data = mysql_query("CALL thinkphp_demo.new_pr('$str')", $conn);
// $data = mysql_fetch_assoc($data);
// mysql_close($conn);
// print_r($data);
libo_sina 2012-03-01
  • 打赏
  • 举报
回复
你说的情况我遇到过!在thinkphp中调用存储我成我是这样解决的:在链接数据库时多加了个参数就解决了:
define('CLIENT_MULTI_RESULTS',131072);
$conn = mysql_connect('127.0.0.1','root','123456','1',CLIENT_MULTI_RESULTS) or die('连接失败');

你可以试一下!
xuzuning 2012-02-29
  • 打赏
  • 举报
回复
var_dump($data);
看看都有什么
lala5201 2012-02-29
  • 打赏
  • 举报
回复
我还在用2.0.。。。
ted 2012-02-29
  • 打赏
  • 举报
回复
难道无解么……两天过去了
ted 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xuzuning 的回复:]

var_dump($data);
看看都有什么
[/Quote]

只有这个
bool(false)
ted 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 csonline8 的回复:]

软件开发者社区这个网站thinkphp的文章挺多的你可以过去找一下,看有没有需要的文章
http://www.6619.net/a/kaifayuyanyukaifapingtai/php/phpkaifakuangjia/Th/
Thinkphp 内置函数表
http://www.6619.net/a/kaifayuyanyukaifapingtai/php/phpkaifakuangj……
[/Quote]

完全没有
ted 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 csonline8 的回复:]

软件开发者社区这个网站thinkphp的文章挺多的你可以过去找一下,看有没有需要的文章
http://www.6619.net/a/kaifayuyanyukaifapingtai/php/phpkaifakuangjia/Th/
Thinkphp 内置函数表
http://www.6619.net/a/kaifayuyanyukaifapingtai/php/phpkaifakuangj……
[/Quote]

感谢,我先去看看……
csonline8 2012-02-27
  • 打赏
  • 举报
回复
软件开发者社区这个网站thinkphp的文章挺多的你可以过去找一下,看有没有需要的文章
http://www.6619.net/a/kaifayuyanyukaifapingtai/php/phpkaifakuangjia/Th/
Thinkphp 内置函数表
http://www.6619.net/a/kaifayuyanyukaifapingtai/php/phpkaifakuangjia/Th/2012/0227/1582.html
ted 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mr_merlin 的回复:]

可能是定界符的问题,试试下面的:
PHP code
$sql = 'delimiter //';
$sql .= "SET @uname = '$str';"
$sql .= "CALL new_pr(@uname)//";
$sql .='delimiter ;';
[/Quote]

不是这个问题,$sql这样写了也没用……
代码如诗 2012-02-27
  • 打赏
  • 举报
回复
可能是定界符的问题,试试下面的:
$sql = 'delimiter //';
$sql .= "SET @uname = '$str';"
$sql .= "CALL new_pr(@uname)//";
$sql .='delimiter ;';

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧