2012-08-11 11 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]: Errore generale: 1366 errato valore intero:

ottenuto questo errore e mi chiedo se c'è qualcosa di sbagliato con il mio codice, perché ho cercato dappertutto per la causa, ma non sembrano per trovare aiuto.

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

Questo è il mio codice SQL se aiuta Sto usando 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);      
} 

Qualsiasi consiglio sarà molto apprezzato.

+0

Il mio tavolo ha solo 2 righe, che è orderno: 1 memberid: 30, e orderno: 2 memberid: 30. –

+0

Puoi pubblicare più del codice rilevante? Penso che tu stia eseguendo la query in modo errato. – drew010

+0

Ho editato il mio codice! –

risposta

11

Per https://stackoverflow.com/a/8882396/1432614, gestita

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

e se non includono STRICT_TRANS_TABLES, rimuoverlo dalla impostazione.

Ad esempio:

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

La ragione si stanno ottenendo che l'errore è dovuto al fatto che si sta tentando di utilizzare un oggetto Zend_Db_Select come valore nella vostra INSERT dichiarazione.

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

E poi all'interno del foreach ciclo:

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

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

Si dovrebbe eseguire l'istruzione $orderno e fetch() il risultato se si desidera utilizzarlo in un'istruzione INSERT:

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

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

$orderDetail->insert($newArray); 
Problemi correlati