2014-08-27 31 views
0

我嘗試通過php mysqli創建一個存儲過程。我創建另一個存儲過程,我沒有問題。此代碼:PHP創建過程

$link = new mysqli("localhost", "root", "", "Question"); 
$link -> multi_query("DROP PROCEDURE IF EXISTS FacturaTerminarFactura; 
    CREATE DEFINER=`root`@`%` PROCEDURE `FacturaTerminarFactura`(IN 
    id_factura INT(40), Total_factura DOUBLE, Total_IVA DOUBLE) 
    BEGIN 
    UPDATE `tb_factura` 
     SET 
     `tb_factura`.`intId_factura_resolucion_dian` = (SELECT 
      MAX(`tb_resolucion_dian`.`intFactura_Actual`) FROM `tb_resolucion_dian` 
      WHERE `tb_resolucion_dian`.`intEstado` = 1 LIMIT 1), 
      `tb_factura`.`dblTotal_factura` = Total_factura, 
      `tb_factura`.`dblIva` = Total_IVA 
     WHERE `tb_factura`.`intid_factura` = id_factura; 
    UPDATE `tb_resolucion_dian` 
     SET `tb_resolucion_dian`.`intFactura_Actual` = 
      tb_resolucion_dian`.`intFactura_Actual` + 1 
     WHERE `tb_resolucion_dian`.`intEstado` = 1; 
    SELECT `tb_factura`.`intId_factura_resolucion_dian` AS ID 
     FROM `tb_factura` 
     WHERE `tb_factura`.`intid_factura` = id_factura; 
END;"); 
$log = ""; 
if ($mysqli -> warning_count) { 
    if ($result = $link -> query("SHOW WARNINGS;")) { 
     $row = $result -> fetch_row(); 
     $log .= $row[0]."-".$row[1]."-".$row[2]."\n"; 
     $result -> close(); 
    } 
} 

這是錯誤

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near '`.`intFactura_Actual` 1 WHERE 
`tb_resolucion_dian`.`intEstado` = 1; ' at line 14 

我看到「+」的問題,但我不知道如何解決。

謝謝,請原諒我的英語。

+0

「resolucion_dian」翻譯成什麼?什麼是數據類型? – 2014-08-27 15:49:15

+0

tb_resolucion_dian是一個表格,但問題是我運行查詢時清除了'+' – user3267098 2014-08-27 15:54:18

回答

1

你有一個錯字這裏:

tb_resolucion_dian`.`intFactura_Actual` + 1 

你缺少反引號前tb_resolucion_dian

另外,根據mysql docs for UPDATE你不需要命名SET子句中的表名。給出的例子是UPDATE t1 SET col1 = col1 + 1;你有UPDATE t1 SET t1.col1 = t1.col1 + 1,這也可能會導致問題。

更新的替代方法是INSERT INTO ... SELECT

+0

我把反引號刪除,但'+'被清除 – user3267098 2014-08-27 16:01:09

+0

確定intFactura_Actual是datanase中的整數類型嗎? – 2014-08-27 16:03:13

+0

是的,intFactura_Actual是一個整數類型 – user3267098 2014-08-27 16:05:20

0

簡單的解決試試這個

`intFactura_Actual` + 1 

TO

`intFactura_Actual` = `intFactura_Actual` + 1 

感謝意見,我看,我沒有讀正確的代碼(看起來很怪異這裏) 有拼寫錯誤代碼就像其他人說的那樣。

+0

如果你看完整的上下文,他確實這樣做.UPDATE'tb_resolucion_dian' SET'tb_resolucion_dian'.'intFactura_Actual' = tb_resolucion_dian'''intFactura_Actual' + 1 – 2014-08-27 15:55:44

+0

不起作用,'+'被清除 – user3267098 2014-08-27 16:01:39