gpt4 book ai didi

php - CakePHP 跳过 select * 语句中的字段

转载 作者:行者123 更新时间:2023-11-29 13:48:30 25 4
gpt4 key购买 nike

首先,我只想说,我知道不使用 CakePHP 的内置功能来查找数据可能会导致漏洞。但是,该查询中绝对没有用户可以选择的输入。它是预先确定和配置的,因此无需注入(inject)任何内容。另外,我正在做联合选择,但我还没有找到针对这种情况的简单解决方案。

我有下表(从 PHPmyadmin 导出)

 CREATE TABLE `orders` (
`id` int(10) NOT NULL auto_increment,
`userid` int(10) default NULL,
`order_status` varchar(12) NOT NULL default 'Not Filled',
`email` varchar(50) NOT NULL,
`total` varchar(50) NOT NULL,
`fullName` varchar(60) NOT NULL,
`address` varchar(50) NOT NULL,
`city` varchar(50) NOT NULL,
`state` varchar(50) NOT NULL,
`zip` varchar(15) NOT NULL,
`created` datetime default NULL,
`modified` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;


CREATE TABLE `order_items` (
`id` int(20) NOT NULL auto_increment,
`orderid` int(10) default NULL,
`userid` int(10) default NULL,
`item_number` varchar(200) default NULL,
`itemName` varchar(200) NOT NULL,
`price` varchar(10) default NULL,
`quantity` int(10) default NULL,
`total` varchar(10) default NULL,
`item_status` varchar(20) NOT NULL,
`created` datetime default NULL,
`modified` datetime default NULL,
PRIMARY KEY (`id`),
KEY `orderid` (`orderid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

由于字段数量不同,我无法对两个表执行 select * 和 union select 。这是我的查询(使用 $this->model->query())

select  orders.id, orders.userid, orders.order_status, orders.email, orders.total, orders.fullName, orders.Address, orders.city, orders.state, orders.zip, orders.created from orders where userid = '$id' and order_status = 'filled'
UNION
select * from order_items where userid = '$id' and item_status = 'filled'"

这会导致 order_items.orderid 未被选择,因此我尝试单独选择字段

select  orders.id, orders.userid, orders.order_status, orders.email, orders.total, orders.fullName, orders.Address, orders.city, orders.state, orders.zip, orders.created from orders where userid = '$id' and order_status = 'filled'
UNION
select order_items.id, order_items.orderid, order_items.userid, order_items.item_number, order_items.itemName, order_items.price, order_items.quantity, order_items.total, order_items.item_status, order_items.created, order_items.modified where userid = '$id' and item_status = 'filled'"

除了 order_items.orderid 中的所有内容均已选择。当我在 PHPmyadmin 中运行查询时,它选择 order_items.orderid,所以我几乎肯定它与 CakePHP 相关。

我什至尝试将 orderid 更改为 order_id 但它仍然跳过

最佳答案

没有理由编写自己的查询。

这个问题可以通过使用核心部分的 Containable 行为轻松解决。

我假设 OrderOrderItem 是您的模型并且是相关的。 订单有很多OrderItem

// Model/Order.php
public $actsAs = array('Containable'); // Attach containable to your model

// Controller/OrdersController.php
public function view($id) {
$orders = $this->Order->find('all', array(
'conditions' => array(
'Order.id' => $id
),
'contain' => array(
'OrderItem'
)
));
debug($orders);
}

关于php - CakePHP 跳过 select * 语句中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com