2012-08-11 26 views
5
$order = new Application_Model_DbTable_Order(); 

$orderno = $order->select() 
->from($order, 'orderno') 
->where('memberid = ?', $userid) 
->order('orderno DESC') 
->limit(1, 0); 

SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'SELECT ordertable . orderno FROM ordertable WHERE (memberid = '30') ORDER BY orderno DESC LIMIT 1' for column 'orderno' at row 1SQLSTATE [HY000]: Lỗi chung: 1366 không đúng giá trị số nguyên:

Got lỗi này và tự hỏi nếu có bất cứ điều gì sai trái với mã của tôi, bởi vì tôi đã tìm kiếm khắp mọi nơi cho nguyên nhân nhưng không có vẻ để tìm bất kỳ trợ giúp nào.

#SQL code for Ordertable# 
`orderno` int(5) NOT NULL AUTO_INCREMENT, 
`memberid` int(5) DEFAULT NULL, 
PRIMARY KEY (`orderno`) 

#SQL code for Item# 
`itemid` int(5) NOT NULL AUTO_INCREMENT, 
`image` varchar(100) NOT NULL, 
`itemname` varchar(30) DEFAULT NULL, 
`description` varchar(100) DEFAULT NULL, 
`itemtype` varchar(20) DEFAULT NULL, 
PRIMARY KEY (`itemid`) 

#SQL code for Orderdetail# 
`orderdetailno` int(5) NOT NULL AUTO_INCREMENT, 
`orderno` int(5) NOT NULL, 
`itemid` int(5) NOT NULL, 
`unitcost` decimal(6,2) DEFAULT NULL, 
PRIMARY KEY (`orderdetailno`), 
KEY `orderno` (`orderno`), 
KEY `itemid` (`itemid`) 

Đây là mã sql của tôi nếu nó giúp tôi sử dụng MySQL.

$request = new Zend_Session_Namespace('cart'); 

$auth = Zend_Auth::getInstance(); 
$user = $auth->getIdentity(); 
$userid = $user->userid; 

$order = new Application_Model_DbTable_Order(); 
$itemdb = new Application_Model_DbTable_Item(); 
$orderdetail = new Application_Model_DbTable_Orderdetail(); 

$data = array ('memberid' => $userid); 
$order->insert($data); 

$orderno = $order->select() 
->from($order, 'orderno') 
->where('memberid = ?', $userid) 
->order('orderno DESC') 
->limit(1, 0); 


foreach ($request->array as $var) 
{ 
$unitprice = $itemdb->select() 
->from('$itemdb', 'unitcost') 
->where('itemid = ?', $var); 

$newArray = array('orderno' => $orderno, 
'itemid' => $var, 
'unitcost' => $unitprice,); 

$orderdetail->insert($newArray);      
} 

Mọi hướng dẫn sẽ được đánh giá rất nhiều.

+0

bảng My chỉ có 2 hàng, đó là orderno: 1 memberid: 30, và orderno: 2 memberid: 30. –

+0

Bạn có thể đăng nhiều mã liên quan hơn không? Tôi nghĩ rằng bạn đang thực hiện truy vấn sai. – drew010

+0

Đã chỉnh sửa mã của tôi! –

Trả lời

11

mỗi https://stackoverflow.com/a/8882396/1432614, chạy

SELECT @@GLOBAL.sql_mode; 
SELECT @@SESSION.sql_mode; 

và nếu một trong hai bao gồm STRICT_TRANS_TABLES, loại bỏ nó khỏi các thiết lập.

Ví dụ:

SET @@GLOBAL.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 
1

Lý do bạn đang nhận được lỗi đó là bởi vì bạn đang cố gắng sử dụng một đối tượng Zend_Db_Select như một giá trị trong bản Tuyên Bố INSERT của bạn.

$orderno = $order->select() 
       ->from($order, 'orderno') 
       ->where('memberid = ?', $userid) 
       ->order('orderno DESC') 
       ->limit(1, 0); 

Và sau đó bên trong foreach loop:

$newArray = array('orderno' => $orderno, // <-- this becomes a SELECT statment 
        'itemid' => $var, 
        'unitcost' => $unitprice,); 

$orderdetail->insert($newArray); // attempting to insert a select statement 

Bạn nên thực hiện $orderno tuyên bố và fetch() kết quả nếu bạn muốn sử dụng nó trong một tuyên bố chèn:

$ordernum = $orderno->query()->fetch(); 

$newArray = array('orderno' => $ordernum, 
        'itemid' => $var, 
        'unitcost' => $unitprice,); 

$orderDetail->insert($newArray); 
Các vấn đề liên quan