> 백엔드 개발 > PHP 튜토리얼 > phalcon框架中如何实现脱离模型进行sql查询?

phalcon框架中如何实现脱离模型进行sql查询?

WBOY
풀어 주다: 2016-06-23 14:17:06
원래의
1520명이 탐색했습니다.

PHP 框架

比如,我有表A和表B,在models/下有A.php这个model类,而没有B的,现在在A中需要对表B进行一次SQL查询,在不创建B的model类的情况下如何拿到B的数据?

回复讨论(解决方案)

直接写原生的mysql_connect() mysql_select_db() mysql_query() 再循环结果集取数据  

$ar = $obj->fetchAll($sql); 

$r = $obj->fetchOne($sql);

其实 Phalcon 的类都是可以单独使用的,并不一定非要在框架中使用
比如

$connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(        "host" => "localhost",        "username" => "root",        "password" => "",        "dbname" => "test"    ));//print_r(get_class_methods($connection)); //从支持的方法上看,只不过是在PDO上扩展了一些功能$connection->query('set names gbk');$t = $connection->fetchAll('select * from `123`', 1);print_r($t);
로그인 후 복사
로그인 후 복사
Array
(
[0] => Array
(
[id] => 1
[姓名] => 张三
[型号] => A8-300
[工位] => A
[数量] => 200
[时间] => 2013-06-05 08:46:00
)

[1] => Array
(
[id] => 2
[姓名] => 李四
[型号] => A8-300
[工位] => B
[数量] => 121
[时间] => 2013-06-05 08:48:00
)

[2] => Array
(
[id] => 3
[姓名] => 王五
[型号] => A1-200
[工位] => C
[数量] => 45
[时间] => 2013-06-05 07:48:00
)

[3] => Array
(
[id] => 4
[姓名] => 张三
[型号] => A8-300
[工位] => A
[数量] => 420
[时间] => 2013-06-05 10:46:00
)

[4] => Array
(
[id] => 5
[姓名] => 王五
[型号] => A8-300
[工位] => C
[数量] => 500
[时间] => 2013-06-05 13:46:00
)

)
我这个表很怪异吧

$ar = $obj->fetchAll($sql);

$r = $obj->fetchOne($sql);

其实 Phalcon 的类都是可以单独使用的,并不一定非要在框架中使用
比如

$connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(        "host" => "localhost",        "username" => "root",        "password" => "",        "dbname" => "test"    ));//print_r(get_class_methods($connection)); //从支持的方法上看,只不过是在PDO上扩展了一些功能$connection->query('set names gbk');$t = $connection->fetchAll('select * from `123`', 1);print_r($t);
로그인 후 복사
로그인 후 복사
Array
(
[0] => Array
(
[id] => 1
[姓名] => 张三
[型号] => A8-300
[工位] => A
[数量] => 200
[时间] => 2013-06-05 08:46:00
)

[1] => Array
(
[id] => 2
[姓名] => 李四
[型号] => A8-300
[工位] => B
[数量] => 121
[时间] => 2013-06-05 08:48:00
)

[2] => Array
(
[id] => 3
[姓名] => 王五
[型号] => A1-200
[工位] => C
[数量] => 45
[时间] => 2013-06-05 07:48:00
)

[3] => Array
(
[id] => 4
[姓名] => 张三
[型号] => A8-300
[工位] => A
[数量] => 420
[时间] => 2013-06-05 10:46:00
)

[4] => Array
(
[id] => 5
[姓名] => 王五
[型号] => A8-300
[工位] => C
[数量] => 500
[时间] => 2013-06-05 13:46:00
)

)
我这个表很怪异吧

在index里面依赖注入的时候已经建立了一次数据库的连接,假如再使用这种方法那就又多了一个连接了不是吗?有没有更好的方法?只存在一个数据库连接

非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?


非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?

遇到过.... 印象中改了字段名... 还是说用其他方法也可以?... 很久了忘记处理方式了.



非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?

遇到过.... 印象中改了字段名... 还是说用其他方法也可以?... 很久了忘记处理方式了.


要是改字段的话不现实啊。。。要改的话众多项目也都要改代码,而且数据量太大,改起来会锁表,影响各个应用的正常运行。倒是想过干脆select *算了,查出来再过滤字段?可是总感觉这样也会影响效率。。




非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?

遇到过.... 印象中改了字段名... 还是说用其他方法也可以?... 很久了忘记处理方式了.


要是改字段的话不现实啊。。。要改的话众多项目也都要改代码,而且数据量太大,改起来会锁表,影响各个应用的正常运行。倒是想过干脆select *算了,查出来再过滤字段?可是总感觉这样也会影响效率。。





不知道能否帮到你 加个撇号 貌似就不报错了





非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?

遇到过.... 印象中改了字段名... 还是说用其他方法也可以?... 很久了忘记处理方式了.


要是改字段的话不现实啊。。。要改的话众多项目也都要改代码,而且数据量太大,改起来会锁表,影响各个应用的正常运行。倒是想过干脆select *算了,查出来再过滤字段?可是总感觉这样也会影响效率。。





不知道能否帮到你 加个撇号 貌似就不报错了

0.0这个我知道,我是讲在phalcon中来执行$modelsManager->executeQuery($sql);的查询方法,其中$sql="SELECT id, name, `desc` FROM ....";一般我们正常写法会给关键字加反引号,但是使用phalcon他会解析sql,这样写不行。。

怎么呢?我不就是这么写的吗?

$t = $connection->fetchAll('select * from `123`', 1);
로그인 후 복사
로그인 후 복사

怎么呢?我不就是这么写的吗?

$t = $connection->fetchAll('select * from `123`', 1);
로그인 후 복사
로그인 후 복사


public PDOStatement executePrepared(PDOStatement $statement, array $placeholders, array $dataTypes);
로그인 후 복사

这里的$dataTypes是什么?例子里面只传了两个参数啊

不太明白你的意思
间隔时间长了,跟不上你的思路

不太明白你的意思
间隔时间长了,跟不上你的思路

额。。。之前的那个问题解决了,是我没有把新问题说清楚,抱歉。是这样的e,在看文档时发现这个方法

public PDOStatement prepare (string $sqlStatement)//Returns a PDO prepared statement to be executed with ‘executePrepared’$statement = $db->prepare(’SELECT * FROM robots WHERE name = :name’);$result = $connection->executePrepared($statement, array(’name’ => ’Voltron’));public PDOStatement executePrepared (PDOStatement $statement, array $placeholders, array $dataTypes)//Executes a prepared statement binding. This function uses integer indexes starting from zero
로그인 후 복사


但是他这里的示例executePrepared只传了两个参数,但是定义里面是有三个参数的,array $dataTypes是必传单数,想知道这个$dataTypes是啥

不太明白你的意思
间隔时间长了,跟不上你的思路
版主版主快现身~~!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿