SQLSTATE[HY000]:常规错误:1366 不正确的整数值:

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,表示在第一行中的“orderno”列上存在一个问题,因为它无法识别“ SELECT . FROM WHERE(memberid ='30')ORDER BY DESC LIMIT 1”这个字符串作为整数值。请问我的代码是否有什么问题?我已经搜索了所有地方,但似乎找不到任何帮助。
#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`)

这是我的SQL代码,如果有帮助的话,我正在使用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);                    
}

非常感谢您的帮助与指导。


我的表格只有两行,分别是订单号:1 会员ID:30,和订单号:2 会员ID:30。 - Swap Test
你能发更多相关的代码吗?我认为你执行查询的方式不对。 - drew010
2个回答

11

根据https://dev59.com/OGox5IYBdhLWcg3w8IxJ#8882396的回答,运行

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

如果任何一个设置中包含 STRICT_TRANS_TABLES,请将其删除。

例如:

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

1

你遇到这个错误的原因是因为你试图在 INSERT 语句中使用一个 Zend_Db_Select 对象作为值。

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

然后在 foreach 循环内部:

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

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

如果您想在插入语句中使用结果,您应该执行$orderno语句并fetch()结果:

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

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

$orderDetail->insert($newArray);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接