Home > Backend Development > PHP Tutorial > phalcon框架中如何实现脱离模型进行sql查询?

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

WBOY
Release: 2016-06-23 14:17:06
Original
1521 people have browsed it

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);
Copy after login
Copy after login
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);
Copy after login
Copy after login
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);
Copy after login
Copy after login

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

$t = $connection->fetchAll('select * from `123`', 1);
Copy after login
Copy after login


public PDOStatement executePrepared(PDOStatement $statement, array $placeholders, array $dataTypes);
Copy after login

这里的$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
Copy after login


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

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

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template