-- ----------------------------------------------------------
-- 表的结构 `procedure_test`
--CREATE TABLE IF NOT EXISTS `procedure_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;--
-- 转存表中的数据 `procedure_test`
--
DELIMITER $$
--
-- 存储过程
--
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_procedure_test`(title varchar(50),datetime datetime)
BEGIN
insert into procedure_test(title,`datetime`) values(title,datetime);
select LAST_INSERT_ID();
END$$DELIMITER ;
错误类型:Commands out of sync; you can't run this command nowPHP代码<?php
for($i = 0; $i < 20; $i++)
{
$title = 'title'.$i;
$datetime = date("Y-m-d H:i:s");
mysql_query("call insert_procedure_test('$title', '$datetime');") or die(mysql_error());
}
?>

解决方案 »

  1.   

    DELIMITER $$
    --
    -- 存储过程
    --
    CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_procedure_test`(title varchar(50),vdatetime datetime)
    BEGIN
        insert into procedure_test(title,`datetime`) values(title,vdatetime);
        select LAST_INSERT_ID();
    END$$DELIMITER ;不要用关键字做字段名称或表名称。
      

  2.   

    我用1楼的存储过程调用,一切正常;
    call insert_procedure_test('a','2010-11-20 10:10:10');
    mysql> call insert_procedure_test('a','2010-11-20 10:10:10');
    +------------------+
    | LAST_INSERT_ID() |
    +------------------+
    |                5 |
    +------------------+
    1 row in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)mysql> call insert_procedure_test('a','2010-11-20 10:10:10');
    +------------------+
    | LAST_INSERT_ID() |
    +------------------+
    |                6 |
    +------------------+
    1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql>
      

  3.   

    但是为什么在PHP,FOR执行20次就不行呢?存在什么同步差错?
      

  4.   

    错误类型:Commands out of sync; you can't run this command now就是这样了。
      

  5.   

    你既然调用了mysql_query,就得把结果取出来,否则调用太频繁,前后两次query会相互干扰,就会出现你说的错误。
      

  6.   


    地如何解决?平时不用存储过程,是可以一直用mysql_query("insert....")的。
      

  7.   

    你调用mysql_query,应该有返回值的处理。
    不能用这种方式吗?
    $prh = $dbh->prepare('INSERT INTO family (id,name) VALUES (?,?)');
    $dbh->execute($prh,array(1,'Vito'));
      

  8.   

    晕,你调完mysql_query以后,把结果集取出来,再进入下一轮循环啊。
      

  9.   

    <?php
    for($i = 0; $i < 20; $i++)
    {
        $title = 'title'.$i;
        $datetime = date("Y-m-d H:i:s");
        mysql_query("call insert_procedure_test('$title', '$datetime');") or die(mysql_error());
    }
    ?> select LAST_INSERT_ID();每次调用过程插入,就返回一个LAST....ID啊。