2012-08-11 12 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]: Błąd ogólny: 1366 Nieprawidłowa wartość całkowita:

Got to błąd i zastanawiam się, czy jest coś nie tak z moim kodzie, bo szukał wszędzie za przyczyna, ale nie wydają znaleźć jakąkolwiek pomoc.

#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`) 

To jest mój kod SQL, jeśli to pomaga, używam 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);      
} 

Wszelkie wskazówki będą bardzo mile widziane.

+0

moim stole ma tylko 2 wiersze, co jest orderno: 1 memberid: 30, i orderno: 2 memberid: 30. –

+0

Czy możesz dodać więcej odpowiedniego kodu? Myślę, że błędnie wykonujesz zapytanie. – drew010

+0

Zmieniono kod! –

Odpowiedz

11

Per https://stackoverflow.com/a/8882396/1432614 uruchom

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

i jeśli obaj należą STRICT_TRANS_TABLES, usuń go z ustawieniem.

Na przykład:

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

Powodem otrzymujesz ten błąd jest, ponieważ próbujesz użyć Zend_Db_Select obiektu jako wartość w wyciągu INSERT.

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

A potem wewnątrz foreach pętli:

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

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

Należy wykonać instrukcję $orderno i fetch() wyniku, jeżeli chcesz go używać w instrukcji INSERT:

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

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

$orderDetail->insert($newArray); 
Powiązane problemy